u3d在线更新资源方案

来源:互联网 发布:编程培训业余班 编辑:程序博客网 时间:2024/04/27 21:32

现附上雨松大神的文章:
http://www.xuanyusong.com/archives/2405

正如他所说,大部分游戏都是登陆时候检查版本,然后更新需要更新的资源。但坑爹的WWW设计是异步的,但其实游戏一开始已经全部更新完毕,

确保所有东西都是在本地,那么完全可以同步使用。而且异步代码写起来确实麻烦。然后大神提供的方案是:打包用非压缩方式,然后自己用lzma压缩,
然后游戏程序自己下载到本地后解压。看上去似乎是一个不错的解决方案,但我实际操作中发现几个比较蛋疼的问题:
      1.用这样的流程不得不自己进行管理,自己写工具周期长,而且容易出bug。
      2.lzma压缩解压速度堪忧。但如果使用速度较快的zip,压缩率下降,包增大不少。
      3.手机上操作文件其实并不方便,如果你放在StreamAssets下面,你还得考虑加密问题。

所以我觉得这个方案其实并不好,但市面上那么多游戏,似乎都用的很顺畅,于是我就反编译了酷酷爱魔兽,盗梦英雄,我叫MT2的源代码。
观察这些牛逼游戏的方式,发现它们是这样更新的。
第一种:用自带的AssetBundle, 然后代码逻辑全部都是异步处理。 盗梦英雄和酷酷爱魔兽就是这么做的。顺便提下盗梦英雄写的代码真是好啊。
看的非常舒服。确实有这种给力的程序员,那么一开始就架构好思路,然后写异步是可行的。但我们属于后期增加在线更新功能, 前面全是同步逻辑,
不得不暂时放弃。
第二种,也是现在采用的方案。所有的都按照Resource.load逻辑写的。只不过如果有资源要更新,就以AssetBundle下载到本地。然后获取资源的时候,优先
检查AssetBundle中的,如果有就获得,没有就用Resource.load。这样首先解决了同步的问题,其次因为更新的资源和整个包相比很小,也就不用担心压缩的
问题。
0 0
原创粉丝点击