当前位置: 首页 > news >正文

Unity3d 微信小游戏 AB资源问题

简介

最近在做微信小游戏,因为对unity比较熟悉,而且微信也支持了用unity3d直接导出到小游戏的工具,所以就记录下这期间遇到的问题

微信小游戏启动时间主要受以下三点影响:

  • 下载小游戏首包数据文件
  • 下载和编译wasm代码
  • 引擎初始化和首场景加载

从上面可以了解到,如果想让用户尽快的进入游戏,首包资源,代码量,首场景内容量 是影响比较大的因素,其中动态资源又是App和小游戏中都会考虑且很容易适配的方案

资源方案 

App开发中资源更新经常会用到,unity提供的动态资源方案AssetBundle,这种方式也适用于unity导出的微信小游戏,但其中又有一些区别,但是微信小游戏提供了一套资源缓存方案,微信资源缓存方案,点击链接可以查看,总体来说如果按照它的规则比较方便,而且还做了资源更新,以及旧资源删除等功能

当然也可以用自己在App的更新逻辑去实现,以下主要是我用App的资源更新方式去实现资源更新在小游戏中遇到的问题,主要在于WebGL上无法访问设备本地文件系统,需要用到微信小游戏SDK提供的文件读写方式去替换之前的逻辑

UnityWebRequest.DownloadHandlerFile 失效问题

主要原因就是WebGL设备的读写已经发生改变,不能用DownloadHandlerFile写入到本地路径了,但是会在内存中存在,所以你可能会遇到下载完毕之后能用AssetBundle.LoadFromFile(path)能读到数据,但是下次运行就找不到文件了,它并没有真正的写到本地磁盘.

解决方案:不用DownloadHandlerFile,UnityWebRequest.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对象接收数据,而后者需要你自己构建

微信开发者工具,网络缓存问题

这个问题比较难搞,在真机上没有问题,只在微信开发者工具会遇到这个问题,我资源服务器上的内容已经改变,但是下载的数据还是旧的数据,我的解决方法是,如果清缓存不能解决,需要杀掉进程,然后重新打开,再清理缓存

http://www.lryc.cn/news/339423.html

相关文章:

  • Leetcode二叉树刷题
  • 如何给自己的网站添加 https ssl 证书
  • Vue路由跳转及路由传参
  • 计算机网络常见面试总结
  • 时隔一年,再次讨论下AutoGPT-安装篇
  • 项目三:学会如何使用python爬虫请求库(小白入门级)
  • 【热门话题】PyTorch:深度学习领域的强大工具
  • SQL注入sqli_libs靶场第一题
  • QT_day3
  • 使用ADO.NET访问数据库
  • SpringBoot的旅游管理系统+论文+ppt+免费远程调试
  • 数据结构---线性表
  • MySQL 8.0 字符集问题导致报错
  • 单路高清HDMI编码器JR-3211HD
  • 分库,分表,分区,分片
  • 【详解算法流程+程序】DBSCAN基于密度的聚类算法+源码-用K-means和DBSCAN算法对银行数据进行聚类并完成用户画像数据分析课设源码资料包
  • java es相关操作
  • 腾讯EdgeOne产品测评体验——开启安全防护,保障数据无忧
  • 机器视觉图形处理软件介绍
  • C# WinForm简介
  • 概念:CPU、内存、磁盘、Android内存分配
  • Vue 图片加载失败显示默认图片
  • 【Sentinel的限流使用】⭐️SpringBoot整合Sentinel实现Api的限流
  • 【示例】MySQL-SQL语句优化
  • QT 线程的使用
  • Python基于flask的豆瓣电影分析可视化系统
  • 【迅为iTOP-4412-linux 系统制作(4)】ADB 或者 TF 卡烧写测试
  • 阿里云对象存储OSS批量上传,单个上传,批量删除,单个删除!
  • Python的国际化和本地化【第162篇—国际化和本地化】
  • 播放Samba协议下的音视频文件