Unity动态(Runtime)加载脚本

  • Post author:
  • Post category:其他


之前在群里跟人谈到脚本更新问题,于是就突然发现因为U3D对资源进行了打包,所以很难更新资源。说实在,我现在还没找到资源更新的办法,不过知道了资源可以从网络下载实时加载。后来看到有人说可以动态加载脚本,于是就去研究了。途中各种蛋疼不提也罢。其实基本原理就是使用到了C#的反射,熟悉反射的应该很简单就能解决。

var fs = new FileStream(@"D:\Personal\My Documents\Projects\TestLib\TestLib\bin\Release\TestLib.dll", FileMode.Open);
        var b = new byte[fs.Length];
        fs.Read(b, 0, b.Length);
        fs.Close();
        var assembly = System.Reflection.Assembly.Load(b);
        var type = assembly.GetType("Test");
        gameObject.AddComponent(type);

分析这段代码

加载里一个DLL,这个DLL实际上是用C#打包的代码库,关于对库的各种叫法实在让人蛋疼,不提也罢。总之建立一个工程然后引用U3D的库UnityEngine.dll就可以编译,不引用UnityEngine.dll当然首先就没法通过编译。

我这里的类名就叫Test,所以获取类型就是这样的。这里添加组件就不能用AddComponent(string)方法,那样会提示找不到了,可能这个方法只是从字典里面找到相应的类型然后在用AddComponent(type)来添加。



版权声明:本文为fg5823820原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。