- 最后登录
- 2021-7-6
- 注册时间
- 2012-12-27
- 阅读权限
- 90
- 积分
- 76145
- 纳金币
- 53488
- 精华
- 316
|
Unity热更新探讨
1.整个安装包更新,客户端和服务端各种有规定一个版本号,客户端登录时候重服务端下载进行匹配,需要更新时候整个更新。(手游里面一般不这样做,每个版本更新都会丢失用户),如果真要使用就必须测试好游戏,保证没有bug,才更新上去。(算不上热更新,只能叫更新)
2.资源的更新,不支持代码更新。同理在客户端和服务端约定好一个版本,里面包含用assetBundle打包生产的资源MD5,同理客户端登录也下载进行对比,发现不同再从服务端下载下来更新。(缺点:代码逻辑无法更改)
3.使用反射,这个也是多数人使用方法。但是只支持android热更新,IOS不支持。IOS上不支持System.Reflection.Assembly等反射。实现原理在代码里判断平台,如果是IOS就直接AddCompont , android就使用反射加载TextAsset txt = bundle.Load("myBinaryAsText", typeof(TextAsset)) as TextAsset;var assembly = System.Reflection.Assembly.Load(txt.bytes);var type = assembly.GetType("MyClassDerivedFromMonoBehaviour");注意的是不能是大版本的更新涉及底层就使用完整包更新。
4.完整的热更新,使用ulua ,JSB ,L#等技术。使用ulua就必须重写之前的逻辑代码,JSB现在还不是很成熟,支持不高有错需要靠自己解决最主要是里面有些语法还不支持,但是如果发展成熟起来是首选,使用c#开发一键导出js做热跟新太爽。
一般是优先发布android版本,有问题随时热更新代码调试。待版本稳定后,发布ios越狱版本。全部稳定后,最后才发布app store。
5.在ios官方审核中有个技巧,就是不通的功能可以暂时隐藏,等通过就更新一个版本推一个资源过去,检查到资源存在就打开功能。
现在可以选择的方案:1.使用第三种 2.使用第四种 ulua+c# 就是底层框架还是使用c#写,部分功能使用ulua.接下来就是把这两种方法都封装到自己的框架里面。(其实有个设想就是用c#开发,使用自己写文件工具将c#转成lua文件,当然这后面等研究过ulua才试试,这也算是框架一部分尽量简单,先给自己留个设想)
|
|