Unity3D的坑系列:动态加载dll

简介:

Unity3D的坑系列:动态加载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的代码,调用会报错,以上。
本文转自jiahuafu博客园博客,原文链接http://www.cnblogs.com/jiahuafu/p/6708451.html如需转载请自行联系原作者

jiahuafu

相关文章
|
3月前
|
C# 图形学 数据安全/隐私保护
Unity数据加密☀️反射的用法:变量、属性、方法、重载,反射在DLL中的使用方法
Unity数据加密☀️反射的用法:变量、属性、方法、重载,反射在DLL中的使用方法
|
3月前
|
PHP 数据库 数据安全/隐私保护
Unity数据加密☀️ 三、加密DLL供Unity使用
Unity数据加密☀️ 三、加密DLL供Unity使用
|
3月前
|
C# 图形学 数据安全/隐私保护
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
|
6月前
|
移动开发 安全 图形学
如何绕过某讯手游保护系统并从内存中获取Unity3D引擎的Dll文件
如何绕过某讯手游保护系统并从内存中获取Unity3D引擎的Dll文件
83 0
|
11月前
|
移动开发 安全 图形学
如何绕过某讯手游保护系统并从内存中获取Unity3D引擎的Dll文件
通过动态分析了它的保护方法,通过改源码刷机的方法绕过了它的保护方案(也可通过hook libc.so中的execve函数绕过保护),接下来就可以直接使用GameGuardain这个神奇附加上去进行各种骚操作了。这里主要讲一下如何去从内存中获取Assembly-CSharp.dll 和 Assembly-CSharp-fristpass.dll文件。
|
编译器 C# 图形学
Unity与 DLL文件 ☀️| 怎样使用VC++生成一个DLL文件并调用!(包括 在VS 中调用 和 在Unity中调用)
📢前言 🎬通过VC 生成DLL文件 🎥在VS中生成DLL文件 🏳️‍🌈第一步:新建一个dll项目 🏳️‍🌈第二步:新建一个`.h头文件`和`.cpp源文件` 🏳️‍🌈第三步:在`.h头文件`和`.cpp源文件`中编写代码 🏳️‍🌈第四步:生成dll和lib文件 🎥在VS中进行调用DLL文件 🚩第一步:先来新建一个项目 🚩第二步:复制firstDLLTest.dll和firstDLLTest.lib文件和上一个项目的头文件firstDLLTest.h 🚩第三步:在新项目里面添加C++代码 🚩第四步:添加头文件firstDLLTest.h和firstDLLTest.
Unity与 DLL文件 ☀️| 怎样使用VC++生成一个DLL文件并调用!(包括 在VS 中调用 和 在Unity中调用)
|
C# 图形学 C++
Unity与 DLL文件 ☀️| 怎样使用 C# 类库 生成一个DLL文件 并 调用!
📢前言 🎬生成DLL文件 🎥使用 C#类库 将Unity中的脚本打包成 DLL文件 并调用 🏳️‍🌈第一步:打开Visual Studio之后,新建一个项目 🏳️‍🌈第二步:选择类库(.NET Framework),改个名字,选择一个位置路径 🏳️‍🌈第三步:然后在创建的脚本中简单写一点代码,如下所示 🏳️‍🌈第四步:然后在解决方案资源管理器右键这个脚本 -> 添加 -> 引用 🏳️‍🌈第五步:然后点击浏览,找到Unity安装路径 -> Editor -> Data -> Managed 下的这两个DLL 文件,点击添加!
Unity与 DLL文件 ☀️| 怎样使用 C# 类库 生成一个DLL文件 并 调用!
|
程序员 编译器 Linux
Unity与 DLL文件 ☀️| 什么是DLL✨?
📣前言 在之前的文章有介绍过so文件,那本篇文章就来介绍一些DLL文件吧! 提起DLL文件,大家肯定不会陌生,就算自己没编写生成过DLL文件,那也一定见过! Windows系统打开电脑C盘的System文件夹,往下一拉就会发现有超级多的带有.dll后缀的文件! 那DLL文件到底是个怎样的存在呢?本篇文章就来好好研究一下这个DLL文件究竟是个啥!
Unity与 DLL文件 ☀️| 什么是DLL✨?
|
XML 图形学 数据格式
Unity3d游戏开发之使用AssetBundle和Xml实现场景的动态加载
在Unity3D游戏开发过程中,因为受到游戏容量、平台性能和热更新等诸多因素的限制,我们可能无法将所有的游戏场景打包到项目中然后相对”静态”地加载,那么这个时候就需要我们使用动态加载的方式来将游戏场景加载到场景中。
1313 0
|
测试技术 C# 图形学
Unity C#代码封装dll文件完美教程(Chinar-开发者必经之路)
Unity C#代码封装dll文件完美教程(Chinar-开发者必经之路) 将脚本封装为DLL库,本文提供全流程,中文翻译。 助力快速完成 Unity C#脚本文件封装为 DLL 库文件 DLL (Dynamic Link Library) —— 中文:动态链接库
5386 0