欢迎来到天天文库
浏览记录
ID:52323003
大小:14.91 KB
页数:2页
时间:2020-03-26
《unity3d游戏框架设计2——加载(动态更新).docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、U3D最好的东西之一就是加载了,它已经封装得非常好,能实现版本的自我控制。但经常都有朋友在抱怨U3D不能动态更新(C#代码),只能用lua之类的话,其实我想说,U3D真的可以进行动态代码更新。下面我就仅谈如何进行代码更新: 首先,代码更新要求代码必须是一个U3D能识别的资源,所以采用.dll方式进行加载是不可行的。那如何做呢?(文章出自狗刨学习网) 大家可以将.dll的文件直接更名为.bytes或.txt等文本文件的名称,可以打包成bundle文件(也可以不打包,但需要自己控制版本),从网络上加载下来的b
2、undle文件中,可以通过以下代码加载.dll中的脚本Typetype=loader.GetClass("Core.Src.Engine","Core");Componentengine=gameObject.AddComponent(type);System.Reflection.MethodInfomethod=type.GetMethod("Init");method.Invoke(engine,newobject[]{}); 其中,Core为.dll的名称,Core.Src.Engine为一个Mono
3、Behavior脚本,其内部有一个Init()函数,用于初始化。 好了,其实说到这里就已经解决动态更新代码的问题了。但也有很多人问我以下两个问题:1.Core库里面怎么访问NGUI、tk2d等插件,根本没法写代码嘛? 答:难道NGUI、tk2d就不能做成动态链接库了么?大家应该明白了吧。2.就算做成动态链接库,用U3D怎么调试开发呢? 答:你可以在其他目录下建立vs工程,其中一个模块在U3D的工程中,更改该模块编译输出路径不在U3D工程中,不就可以既能调试又能编译成.dll了么,最多自己写个工具改文件名或
4、打包Bundle。 至于如何切换.dll中的代码还是U3D工程中的代码,我贴一段代码,我想大家就明白了:IBundleLoaderloader=BundleManager.instance.Get("DLL");if(loader!=null){ Typetype=loader.GetClass("Core.Src.Engine","Core"); Componentengine=gameObject.AddComponent(type); System.Reflection.MethodInf
5、omethod=type.GetMethod("Init"); method.Invoke(engine,newobject[]{BundleManager.instance});}else{ Core.Src.Engineengine=gameObject.AddComponent(); engine.Init(BundleManager.instance);}
此文档下载收益归作者所有