怎样做视频网站,中英文切换网站,阳江做网站多少钱,天堂在线资源种子简介
最近在做微信小游戏#xff0c;因为对unity比较熟悉#xff0c;而且微信也支持了用unity3d直接导出到小游戏的工具#xff0c;所以就记录下这期间遇到的问题
微信小游戏启动时间主要受以下三点影响#xff1a;
下载小游戏首包数据文件下载和编译wasm代码引擎初始化…简介
最近在做微信小游戏因为对unity比较熟悉而且微信也支持了用unity3d直接导出到小游戏的工具所以就记录下这期间遇到的问题
微信小游戏启动时间主要受以下三点影响
下载小游戏首包数据文件下载和编译wasm代码引擎初始化和首场景加载
从上面可以了解到如果想让用户尽快的进入游戏首包资源代码量首场景内容量 是影响比较大的因素其中动态资源又是App和小游戏中都会考虑且很容易适配的方案
资源方案
App开发中资源更新经常会用到unity提供的动态资源方案AssetBundle这种方式也适用于unity导出的微信小游戏但其中又有一些区别但是微信小游戏提供了一套资源缓存方案微信资源缓存方案点击链接可以查看总体来说如果按照它的规则比较方便而且还做了资源更新以及旧资源删除等功能
当然也可以用自己在App的更新逻辑去实现以下主要是我用App的资源更新方式去实现资源更新在小游戏中遇到的问题主要在于WebGL上无法访问设备本地文件系统需要用到微信小游戏SDK提供的文件读写方式去替换之前的逻辑
UnityWebRequest.DownloadHandlerFile 失效问题
主要原因就是WebGL设备的读写已经发生改变不能用DownloadHandlerFile写入到本地路径了但是会在内存中存在所以你可能会遇到下载完毕之后能用AssetBundle.LoadFromFile(path)能读到数据但是下次运行就找不到文件了它并没有真正的写到本地磁盘.
解决方案不用DownloadHandlerFileUnityWebRequest.isDone 之后用微信提供的读写api写到本地缓存,如果你用DownloadHandlerFile然后写入会报 NotSupportedException: Raw data access is not supported for asset bundles
WXFileSystemManager fs WX.GetFileSystemManager();
CheckDirectoryExit(WriteFilesPath);//注意如果文件夹不存在需要手动创建MkdirSync
fs.WriteFileSync(WriteFilesPath, www.downloadHandler.data);
加载AssetBundle
还是因为路径读写问题不能用c#提供的读写api比如Directory;File;Path.等这些都不能用了
AssetBundle.LoadFromFile(path)也不可用
WXFileSystemManager wxFileSystem new WXFileSystemManager();
byte[] abMemory wxFileSystem.ReadFileSync(path);
manifestAb AssetBundle.LoadFromMemory(abMemory);
读取文本方式
// 读取文件内容fs.ReadFile(new ReadFileParam(){filePath path,encoding utf-8,success (res) {Debug.Log(read success : res.stringData);localfiles res.stringData.Split(new string[] { \n, \r\n }, StringSplitOptions.RemoveEmptyEntries);},fail (res) {Debug.LogError(read error----: res.errMsg);}});
还遇到一个问题就是UnityWebRequest.Get()和new UnityWebRequest()的区别之前基本上都用UnityWebRequest.Get()但这次写代码时误写了new UnityWebRequest()导致访问资源成功但是资源数据确没有主要原因时UnityWebRequest.Get()构建时会默认创建DownloadHandlerBuffer对象接收数据而后者需要你自己构建
微信开发者工具网络缓存问题
这个问题比较难搞在真机上没有问题只在微信开发者工具会遇到这个问题我资源服务器上的内容已经改变但是下载的数据还是旧的数据我的解决方法是如果清缓存不能解决需要杀掉进程然后重新打开再清理缓存