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

你可能感兴趣的:(unity,代码热更新,unity)