Unity热更新方案

如果题主问的是,有没有好的资源热更新方案?答案是,AssetBundle
如果题注问的是,有没有好的代码热更新方案?就要多说几句了。。

Unity的代码热更新有两种方式:
1 assetbundle代码热更新
Unity的代码热更新机制可以简单概括为以下几步:

1 项目开发中,可以将部分逻辑提取至一个单独的代码库工程中,打包为DLL

2 将DLL打包为AssetBundle

3 Unity程序动态加载assetBundle中的DLL文件,使用Reflection机制来调用代码。

程序运行时的状况如下:

这个方案是真正的c#级别的代码热更新,但它有很多限制:
1 iOS平台不支持
这些DLL中的脚本不能在编辑器中使用
如果脚本在动态Dll里,调用AddComponent()挂此脚本在Prefab上时不能使用AddComponent("SomeScript"),要用AddComponent(Type.GetType("SomeScript"));
动态DLL里使用[RequireComponent(typeof(SomeScript))]无效


2 lua热更新
luaiOS平台下,热更新方案的唯一解。目前最成熟的lua插件是uLua&cstoLua,有成功的商业产品案例(啪啪三国、绝地战警)等。
即便有成功案例,但也绝不可能大范围使用lua,效率是个大问题。
但值得注意的是,即使是使用lua,仍然是不符合appstore的政策,依然存在被下架的风险。


综上所述:
对于Unity的代码热更新,并没有好的方案。只有差的方案(AssetBundle)和更差的方案(Lua)。
Android:优先用AssetBundle
iOS:对性能不敏感的逻辑,例如界面逻辑,小范围使用Lua

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值