您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 程序开发 > 开发经验 >
    Unity动态运行外部代码
    时间:2015-08-03 09:06 来源:互联网 作者:网络 浏览:收藏 挑错 推荐 打印

    Unity动态运行外部代码(实现代码更新)


    我们要做的就是将需要动态运行的脚本进行编译(生成一个dll), 


    Unity动态运行外部代码 

    打开vs2008,新建项目,选择类库,在这里我创建了一个Test类,代码如下 

    using System;using System.Collections.Generic; 
    using System.Linq;using System.Text; 

    using UnityEngine; 
    using System.Collections; 

    public class Test : MonoBehaviour{ 
        void Start()    { 
            Debug.Log("sucess");    } 
    }

     

    因为引用了UnityEngine,所以我们要把这个引用添加上,在vs里右击项目面板中的引用,添加引用,选择浏览,找到UnityEngine.dll 


    Unity动态运行外部代码

     

    这个文件(我的路径是uninty安装目录\Editor\Data\Managed\UnityEngine.dll),添加好后,在菜单栏点击生成-->生成Test,我们就可以生成我们的dll了.生成的dll可以在vs工程目录下->bin-->Debug下找到.(以上步骤可能感觉很啰嗦,这只是为了照顾一些像我一样不习惯用vs编程的人,大神级的vs用户可以自动选中过滤,哈哈...) 

    第二步,打开我们吃饭的家伙,将生成的dll文件放到unity工程下(建议放到Asset/Plugins下,当然不放貌似也没有什么关系),说句题外话,其实这个dll文件,我们是可以直接使用的,可以在其他类中直接调用,甚至可以直接拖拽到物体上都是可以的,但现在我们很明显不打算这么做. 
    下面我们就需要将这个已经编译过的脚本打包成我们的资源包格式了,不过在打包之前还有项工作要做,那就是将我们的Test.dll改成Test.bytes,否则打包的时候会出错. 

    最后,我们建个脚本去调用这个外部的脚本,代码如下 

     

    using UnityEngine;using System.Collections; 
    using System;public class MainPrecess : MonoBehaviour 
    { /** 
      * @Function:  * @AhthorUnity动态运行外部代码iHaiyang 
      * @Date:  */ 
      IEnumerator Start () 
     {     string url = "file:///"+Application.dataPath+"/Plugins/Test.unity3d";//这个可以是网络地址,Test.unity3d是我们打包后的文件 
         WWW www = new WWW(url);     yield return www;

         if(www.error!=null)

        {

    print(www.error);

        }

        else

       {

        AssetBundle bundle = www.assetBundle;

        TextAsset txt = bundle.Load("Test") as TextAsset;

                       //使用反射类载入

        System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(txt.bytes);

        Type type = assembly.GetType("Test");

        GameObject obj = new GameObject();

        obj.AddComponent(type);

       }

    }


    (责任编辑:雷霆风)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。