查看: 1407|回复: 2
打印 上一主题 下一主题

[其他] Unity热更新探讨

[复制链接]

9903

主题

126

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
53488
精华
316

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2015-12-19 06:46:04 |只看该作者 |倒序浏览

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才试试,这也算是框架一部分尽量简单,先给自己留个设想)

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

13

主题

8

听众

4583

积分

中级设计师

Rank: 5Rank: 5

纳金币
13
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2015-12-21 09:54:18 |只看该作者
这个文章写得太好了,留着收藏起来,以备不时之需
回复

使用道具 举报

0

主题

0

听众

213

积分

设计实习生

Rank: 2

纳金币
2
精华
0

最佳新人

板凳
发表于 2015-12-21 11:19:55 |只看该作者
ulua   slua   现在已经有成熟的技术了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-14 15:09 , Processed in 0.230684 second(s), 27 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部