赞
踩
老工程原本是C#,想做热更,于是接入了Xlua和Addressable。由于工程老,人手也不够,只是新代码使用Xlua,老功能(尤其是核心战斗还是C#)。大半年后觉得并不能达到预期需求。于是通过再接入Hybrid来解决最终问题。
HybridCLR 的接入,以及原理这里就不重复说明了,在官网上有非常详细的教程
Github:https://github.com/focus-creative-games/hybridclr
接入过程中出现的错误,第一时间查看官网的“常见错误”。能解决绝大多数问题
https://gitee.com/ldr123/HybridCLRXlua
TextAsset hotfixDll = Addressables.LoadAssetAsync<TextAsset>($"ExtensionRes/Extension_{i}").WaitForCompletion();
byte[] encryptBytes = hotfixDll.bytes; // 得到加密的代码数据
byte[] decryptBytes = Security.XXTEA.Decrypt(encryptBytes, PreloadConst.GetDK()); //解密代码
var gameAss = System.Reflection.Assembly.Load(decryptBytes);// 加载到内存中
不能完全依靠addressable 的Check for Content Update功能。
如果你修改了某个代码文件,并打好了热更资源。然后使用此功能。所有依赖此代码资源文件(prefab、scriptobject)全会被标记已改变。经本人测试,这些资源完全没有更新必要。所以这里可能需要自己创建额外的资源管理工具来辅助检查。
另外两个Addressable设置问题(坑)
Unique Bundle IDs 如果打勾。可能会造成丢失一些资源的引用。
MonoScript Bundle Naming Prefix 使用Defuat Group GUID打包。然后会生成有一个monoscript.Bundle在默认组里面。如果更新时增加新的Mono脚本,务必将monoscript.Bundle 一起更新。否则挂载新的脚本的Prefab会丢失此脚本。
暂时就这些了。发现新问题会补充。也欢迎交流哈
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。