在Unity3D的项目开发过程中,可能会使用一些以前别人写好的C#,Java,C++等文件,我们可以把它们做成动态链接库DLL文件在项目中进行调用,下面用一个简单的例子来说明怎么制作一个DLL文件并在Unity中使用它。

     首先新建一个Unity3D工程,我们命名为"Test",创建一个C#文件,命名为“DLLTest”,文件代码如下所示:


using UnityEngine;
using System.Collections;

public class DLLTest : MonoBehaviour {

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}
	
	public void Fun()
	{
		print("Hello World !");
	}
}



      我们只是添加了一个公有函数“Fun”,函数的功能是输出“Hello World !”,然后我们把“DLLTest”文件复制出来,先暂时放在桌面即可。这时可以把Unity3D工程中的“DLLTest”文件删掉了。

      接下来在MonoDevelope中新建一个Solution,即重新建立一个解决方案,命名为“MyTest”,并放在D盘的Projects文件夹,方便以后找到它。步骤是点击File-->New-->solution..,选择C#选项卡下面的Library,然后填写项目名称和选择存放地址,如下图所示:

     

unity用线程加载dll unity调用dll_Unity3D

     点击OK,然后把我们之前放在桌面上的“DLLTest”C#文件导入到Solution中,首先确定右上角选择的是“Default”,

unity用线程加载dll unity调用dll_unity用线程加载dll_02

,然后右键项目名“MyTest”,选择Add-->Add Files..,选择桌面的“DLLTest”即可,它会提示你以怎样的形式导入文件,移动还是复制,随便选一个即可。

      我们Build编译一下,有可能会出现一个.Net框架版本不符合的错误提示(如果没有这个错误则略过)。

         

unity用线程加载dll unity调用dll_选项卡_03

     解决的方法也很简单,我们选中"MyTest"项目,点击菜单栏的“Project-->MyTest Options”,在弹出的对话框中选择General选项卡,在“Target framework”选项栏中选择合适的版本即可,我这里选择的是4.0,如下图所示:

unity用线程加载dll unity调用dll_DLL调用_04

       再Build编译一次,发现还是有错误,提示缺少命名空间,错误信息如下:

unity用线程加载dll unity调用dll_unity用线程加载dll_05

       这是因为缺少“UnityEngine.dll”文件,我们只需把它导入即可,那么这个文件在哪呢?我们把新建的Unity3D项目保存后导出为.exe文件,命名为“temp”那么在导出后的temp_Data文件夹下的Managed文件夹内就可以找到“UnityEngine.dll”文件。

       回到我们在MonoDevelop创建的"MyTest"项目,右键“References“文件夹,选择Edit References,然后选择.Net Assembly选项卡,找到刚刚的”UnityEngine.dll“文件并添加即可。如图所示:

unity用线程加载dll unity调用dll_选项卡_06

      再Build一次,错误提示就没有了。然后我们打开项目地址,由于我之前保存在D盘的Projects文件夹,所以我的DLL文件存放目录是”D:\Projects\MyTest\MyTest\bin\Debug“,找到”MyTest.dll“并复制出   来,暂时放在桌面。

      打开Unity3D项目”Test“,把”MyTest.dll“文件拖到项目中,然后将MyTest下的DLLTest脚本组件拖到摄像机上,新建一个C#文件,拖到摄像机上,编写代码如下:


using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour {

	// Use this for initialization
	void Start () {
	
		//获得DLLTest组件
		DLLTest dll = camera.GetComponent<DLLTest>();
		//调用Fun函数
		dll.Fun();
		
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}



     运行,控制台打出”Hello World !“,则调用DLL文件成功。