【坑】IOS DLL热更新

我现在参与的项目是做MMO手游,目标平台是Android和iOS,iOS平台不能动态加载dll(什么原因找乔布斯去),可以直接忽略,而在Android平台是可以动态加载dll的,有了这个就可以实现代码更新,不过实际上,在unity里要用上动态加载dll是有很多限制的(不了解的话就是坑)。

限制1:在Android手机里动态加载dll不能使用Assembly.LoadFile(string path),只能使用Assembly.Load(byte[] rawAssembly)这个接口,所以要自己想办法先读出来。

限制2:动态加载的脚本不能在编辑器里挂在prefab上。

限制3:如果脚本在动态dll里,调用AddComponent()挂此脚本上prefab上时不能使用AddComponent(“SomeScript”)的方式调用,要用AddComponent(Type.GetType(“SomeScript”))。

限制4:在动态dll里使用[RequireComponent(typeof(SomeScript))]无效,所以不能使用。

我目前主要就是遇到这些坑,以后有什么新发现再进行补充。

 

修正&补充:在iOS下不是都不能动态加载dll,越狱的手机可以实现,具体可参考文章:http://blog.csdn.net/lucky_06/article/details/9093879,亲测没问题。

 

再次修正:iOS实际上还是不能实现真正的代码热更新,使用上述方法只能调用外部dll的接口,但执行逻辑还是在native code里面。简单的说,之前我测试的时候是项目里面有a.dll的代码,然后再Assembly.Load a.dll进来,调用a.dll里面的方法是可以的,但实际是调用了项目里的代码,如果项目里没有a.dll的代码,调用会报错,以上。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Addressable是Unity中的一个工具包,用于管理资源的加载和卸载。iOS指的是在发布应用后,可以通过网络下载新资源文件,实现应用新的功能。 在Unity中使用Addressable可以实现iOS的功能。首先,我们需要将需要的资源文件分割成小块,并上传到服务器上。然后,在应用中使用Addressable加载资源时,可以通过指定资源的地址来加载对应的资源文件。 当应用启动时,可以通过检查服务器上的资源版本号来判断是否需要进行。如果有新的资源文件,可以使用Addressable下载新的资源文件,替换原有的资源文件,以实现应用的新。 使用Addressable进行iOS的好处是可以降低应用的安装包大小,因为可以把一些较大的资源文件分离出来,通过网络进行下载。同时,也可以减少应用的新时间,只需要下载新的资源文件而不是整个应用。 然而,使用Addressable进行也需要注意一些问题。首先,要保证服务器上的资源文件的稳定性和完整性,以免应用在新资源时出现错误。其次,要考虑用户的流量消耗,尽量减少资源文件的大小和下载次数。 总之,通过使用Unity中的Addressable工具包,我们可以实现iOS的功能,实现应用的自动新。这样可以提升用户体验,减少安装包大小和新时间,但也需要注意资源文件的稳定性和用户的流量消耗。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值