在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,然后填写项目名称和选择存放地址,如下图所示:
点击OK,然后把我们之前放在桌面上的“DLLTest”C#文件导入到Solution中,首先确定右上角选择的是“Default”,
,然后右键项目名“MyTest”,选择Add-->Add Files..,选择桌面的“DLLTest”即可,它会提示你以怎样的形式导入文件,移动还是复制,随便选一个即可。
我们Build编译一下,有可能会出现一个.Net框架版本不符合的错误提示(如果没有这个错误则略过)。
解决的方法也很简单,我们选中"MyTest"项目,点击菜单栏的“Project-->MyTest Options”,在弹出的对话框中选择General选项卡,在“Target framework”选项栏中选择合适的版本即可,我这里选择的是4.0,如下图所示:
再Build编译一次,发现还是有错误,提示缺少命名空间,错误信息如下:
这是因为缺少“UnityEngine.dll”文件,我们只需把它导入即可,那么这个文件在哪呢?我们把新建的Unity3D项目保存后导出为.exe文件,命名为“temp”那么在导出后的temp_Data文件夹下的Managed文件夹内就可以找到“UnityEngine.dll”文件。
回到我们在MonoDevelop创建的"MyTest"项目,右键“References“文件夹,选择Edit References,然后选择.Net Assembly选项卡,找到刚刚的”UnityEngine.dll“文件并添加即可。如图所示:
再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文件成功。