【Unity】WebGL/WEIXINMINIGAME微信小游戏经验总结Learned
【Unity】WebGL/WEIXINMINIGAME微信小游戏经验总结Learned
概述
本文目标在于罗列Unity WebGL项目发布微信小游戏项目所涵盖的概念,相关坑点解决方法,重要的引用文档(方便后续快速查阅)等
概念
- Q:什么是WebAssembly
- A:WebAssembly(简称 Wasm)是一种二进制指令格式,设计用于在 Web 浏览器中高效运行。WebAssembly 的目标是提供一种接近原生性能的执行环境,同时保持与现有 Web 技术的兼容性。
- 它是一种低级别的语言,可以被多种高级语言(如 C、C++、Rust 等)编译成 WebAssembly 字节码,然后在浏览器中运行。
- WebAssembly 代码在浏览器中以接近原生的速度执行,因为它是在虚拟机中直接运行的二进制代码。
- WebAssembly 运行在沙箱环境中,具有严格的内存管理和访问限制,确保了安全性。
- WebAssembly 代码可以拆分为多个模块,每个模块可以独立加载和执行。
- WebAssembly 代码可以与 JavaScript 无缝集成,通过 JavaScript 调用 WebAssembly 函数,反之亦然。
## 常见问题
- 微信小游戏不支持WebGL默认的indexDB文件存储,也就是不支持System.IO.File利用IndexDB读写,因此通过C# API存储的文件只会临时存在于内存当中,而不会持久化到手机存储中,退出游戏后即清理。需要持久保存文件,请使用微信SDK提供的文件接口
- WebGL下如何访问StreamingAssets文件夹?
- Unity打包WebGL之后保留了StreamingAssets文件夹,但是使用Application.streamingAssetsPath是无法读取到StreamingAssets文件路径的。为了能正确读取到本地StreamingAssets文件的数据,我们需要使用到UnityWebRequest类(Unity老版本使用WWW)。Directory.Exists访问的是磁盘路径,”网址+端口+文件路径”会组装出URL路径,所以访问不了。
- WebGL如何访问Application.PersistentDataPath?
- WebGL下persistentDataPath为 “/Idbfs/{md5 code}”,是浏览器用于缓存的虚拟路径,使用System.IO.File接口进行访问,不能使用UnityWebRequest(至少我试过不行)。访问路径例如“/Idbfs/{md5 code}/{filePath}”
- 微信文件API,ReadFileSync和WriteFileSync写入二进制文件坑点
- 坑点1:WriteFileSync时,Encoding需要传入base64。使用ReadFileSync读出时也要使用base64,因为接口以字符串形式返回读取的二进制文件,base64能保证二进制不被截断(不会出现’0x00’)
坑点2:ReadFileSync以字符串形式返回读取的二进制文件,即使已经传递了base64作为Encoding,但其返回的string内容仍然是以base64编码的字节,仍然需要使用System.Convert.FromBase64String(string)转换从而得到bytes
- 25.1.10更新,1.7日的版本貌似修复了使用“binary”读取字节流的问题,正好那几天被这个问题卡了好久(;-;)
- 微信开发者工具ErrorLog:Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!
有用的链接
#WebGL/微信小游戏
- WebGL框架指北(开发指南)https://zhuanlan.zhihu.com/p/475307249
- 团结关于WebGL平台的平台特征介绍/性能优化指引/资源缓存/常见问题等https://unity.cn/instantgame/docs/WechatMinigame/WebGLPlatform/
- 微信小游戏转换工具文档https://wechat-miniprogram.github.io/minigame-unity-webgl-transform/Design/PerfOptimization.html
- 微信小游戏类目以及相关设置https://developers.weixin.qq.com/minigame/introduction/guide/type.html
- 微信公众平台/小游戏后台登录https://mp.weixin.qq.com/cgi-bin/loginpage?url=%2Fwxamp%2F
- UOS,后端服务https://uos.unity.cn/apps
- 微信小游戏API文档,与提供给Unity的API基本相同https://developers.weixin.qq.com/minigame/dev/guide/base-ability/file-system.html
#抖音小游戏
- Unity制作抖音小游戏方案https://cloud.tencent.com/developer/article/2302016
- 抖音小游戏接入指南https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/guide/game-engine/rd-to-SCgame/unity-game-access/sc_access_guide
#IL2CPP
- IL2CPP APP分析https://bbs.kanxue.com/thread-282821.htm
#未仔细阅读但之后可能有用
- 知乎一篇关于Unity转微信小游戏的坑点总结https://zhuanlan.zhihu.com/p/588014015
本文由作者按照 CC BY 4.0 进行授权