动态为unity的游戏物体添加脚本

本文介绍如何使用Unity的反射技术动态加载并挂载DLL库中的脚本到游戏物体上,同时探讨了动态修改脚本内容时遇到的问题及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

续上一篇博客,上一篇博客有生成了Test.dll库,下面就利用反射技术把Test.dll库中的脚本代码动态挂载在游戏物体上,在unity场景中新建一个Cube,名为Cube,再新建脚本,名为Test,挂载到Cube上,编辑脚本如下:

using  System.Collections;

using  System.Collections.Generic;

using  UnityEngine;

using  System.IO;

using   System;

using   System.Reflection;

public class Test :MonoBehaviour {

        

            FileStream   fs;

            Type  type;

           void Start () {  

                   gameObject.AddComponent(GetType());                 //为Cube动态添加脚本

           }

          

           public Type GetType() {

                      fs = new  FileStream("Test.dll", FileMode.OpenOrCreate);

                     byte[]b = new byte[fs.Length];

                     fs.Read(b, 0, b.Length);

                     fs.Dispose();

                     fs.Close();

                    Assembly  assembly = System.Reflection.Assembly.Load(b);

                    type = assembly.GetType("First." + "Program");

                    return type;

          }

   }


运行游戏,你会发现Cube游戏物体上动态挂上了一个名为Program的脚本,并且后台会打印输出"我是dll方法"


动态移除脚本

 Destroy(this.gameObject.GetComponent("Program"));             //移除脚本



一个很大的坑,当你动态修改Test.dll里面的脚本内容时,再一次调用GetType方法,运行结果还是没修改时的情况,原因我猜想是由于通过文件流读入的是dll库名称没变,有谁知道的还望告知一下!解决方法,动态修改脚本内容时顺便也把编译输出的dll库名称也修改一下(在上一篇博客中修改),这时还得使GetType方法中读入的dll库的名称与修改后的dll库名称一致。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxy2847225301

测试使用

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值