unity开发的APP如果需要实现类似于热更新的功能,但同时需要考虑苹果对热更的限制,有什么好的方案?
unity开发的APP如果需要实现类似于热更新的功能,但同时需要考虑苹果对热更的限制,有什么好的方案? 首先啊,没有好方案,iOS平台(包括现在的Android平台)所有热更方案都是灰色地带,是摆在台面上的偷偷摸摸。风险是必然存在的,需要自己斟酌权衡。然后,目前主要思路就是用Assetbundle.
资源用ab包做热更,这个问题不大,小团队可以直接网上找现成的ab包资产管理框架,比如Unity第一方的Addressables,比如第三方的TinaX(逃
有的回答说资源热更不受限制,这与实际也是有出入的。按照苹果的规则,原则上只能进行“适度”的资源热更,比如说应用一启动,你读条下载半天,原则上也是可能会被拒的。
代码逻辑咋办呢,把它当成txt资源或者bytes资源来通过ab包做热更,比如lua语言,把代码文件本身(文本或字节集形式)来热更,然后在把代码运行起来。
具体方案有:
腾讯的xLua,在unity应用上运行lua代码。特点是你的会lua语言
掌趣的ILRuntime,在unity应用上解释运行C#代码(DLL/IL代码,准确的说)。特点是C#,不需要会第二种语言,但是接入ILRuntime需要团队至少有一个人有较高的C#技术水平。
腾讯的Puerts,在unity应用上运行JavaScript/TypeScript代码(也支持ue4)。特点是你得会JavaScript或TypeScript,理论上说上手难度或者要学的东西会大于xLua方案,一方面ts本身比lua东西要多,另一方面实践中lua作为嵌入语言没啥自己的生态,而用ts更多会直接使用ts生态。puerts的诞生是为了解决lua的一些痛点,而这样痛点通常在比较大规模的项目才痛,如果你的项目用lua没啥觉得难受的地方,应该不需要考虑puerts.
上述方案都只是代码的运行环境,具体使用上,要和前面的说的资源热更新方案配合使用,如果一开始上手比较混乱的话,也可以试试网络上一些开源的,把它们调教好的第三方开箱即用框架,比如QFramework,比如TinaX(逃
还有,有个事,苹果的上架审核是比较“灵活”的,各种意义上。 楼上说的很好了,ios代码热更也可以考虑ilruntime的方案 热更分两部分:
1、热更资源,ios和android平台都可以更新,这个是不受限制的
2、代码热更,ios对于代码热更的限制是不可以新增模块,但是可以修复bug,我们用的的是Ifix,一个c#的补丁修复方案。优势在于可以直接用c#更新而不是用lua 推荐一下Tolua+Injectfix工作流
其实Xlua的代码非常值得拜读,干净清爽,其设计也是真正从0到1了一部分。
Tolua代码就没节操很多了,但是这玩意又稳定又快,但是我最初基建搭在这上边了,因此使用了tolua。
使用lua的好处很多,数据层,战斗模拟器,甚至各种算法,全都可以拆出来做,无需启动unity,jetbrain idea+emmylua+lua.exe(自己编一下lua源码就好,或者直接用luaforwindows)即可快速实现功能的"内核"。写出的东西都是强制解偶的"lua库",比较容易管理。
ILR我感觉性能有些糟糕。
还有方案是根据后端选型来决定前端:
后端用.net core,那么前端可以考虑上ILR。
后端用skynet或者c++&lua,那么前端可以考虑上lua
后端用pomelo或者硬上nodejs,那么前端可以考虑上js。
后端Python,那么前端可以劝说他不要用Python。
后端用go,那么前端随意
后端用rust,那么前端可以离职
补充一下为啥会有这种思路:
1.考虑前后端同学互相backup一下,至少代码语言级别不成阻碍,你有事来不了,突发问题或者阻塞研发的问题我至少能帮你看看定位一下
2.对员工成长广度有意义,例如用的xlua和skynet的项目组,只要有兴趣就有相对较低的成本发展成全栈
3.有助于定制规范,做一些前后端代码复用。例如战斗库等。 xLua,ToLua都可以,挺成熟的。
或者试试InjectFix,可以热更c#,不过似乎还没项目使用 Xlua tolua tolua+injectfix 各种Lua方案已经很成熟了 看游戏开发进度和团队的能力
各个方案上面的大佬讲的很清楚了。
个人认为ilruntime还是比较方便的,毕竟lua太X日的了。
页:
[1]