Unity动态(Runtime)加载脚本

本文探讨了在Unity中动态加载C#脚本的方法,利用反射技术实现。通过创建DLL,引用Unity的UnityEngine.dll库进行编译。加载DLL时避免使用AddComponent(string),而是直接使用AddComponent(Type)。网络下载脚本时,遇到使用WWW读取TextAsset转换为byte[]的问题,建议使用C#内置函数。这种方法的缺点是文件未保存在本地,不适用于常规更新,且修复脚本错误时不便。为减少依赖,可能需要借助接口。优点是可以延迟加载部分代码,提高安全性。文章提到了基于C#的LUA实现,表达了对LUA的兴趣。
摘要由CSDN通过智能技术生成

之前在群里跟人谈到脚本更新问题,于是就突然发现因为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)来添加。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值