让Unity更强大之扩展DLL的创建及使用
创建DLL文件:VC工程创建
以VS2008中创建为例,首先在VS中新建一个VC的项目,在新建项目的对话框的模板中,选择“Win32控制台应用程序”,如下图:
随后点击[确定]按钮,进入下一界面。在此界面可以确认你的设置是否正确,如下图:
确认无误后,继续点击[下一步]按钮,进入下一界面。进行应用程序设置,应用程序类型选择“DLL”,附加选项选择“空项目”,如下图:
点击[完成]按钮,项目创建完毕。
创建DLL文件:编写代码
- 在解决方案资源管理器中,右键点击头文件件,新建及编写TestUnityDLL.h文件
TestUnityDLL.h 代码内容如下:
#ifdef _DLLExport_EXPORT
#define _DLLExport __declspec(dllexport)
#else
#define _DLLExport __declspec(dllimport)
#endif
extern "C" {
_DLLExport int TestAdd(int x, int y);
}
2.按上一步骤操作,在解决方案的源文件中新建及编写TestUnityDLL.app文件,代码内容如下:
#define _DLLExport_EXPORT
#include "TestUnityDLL.h"
extern "C" {
int TestAdd(int x, int y )
{
return x + y;
}
}
最后整个解决方案目录就是这样子的:
创建DLL文件:编译DLL
编译时确认一下“项目–属性–配置属性–常规–配置类型”中的设置,是否设置为“动态库(.dll)”。
在Unity中使用DLL文件:导入DLL
打开Unity,并在Unity的Assets目录中,新建一个名为“Plugins”的文件夹,并将编译好的dll文件放到其中,在Inspector菜单中设置这个dll对应的适用平台以及x86或x86_64选项,之后点击[Apply]按钮应用设置,如下图:
编写下面的测试代码,并添加到场景物体中,如Main Camera。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Runtime.InteropServices;
using System.IO;
public class TestDll : MonoBehaviour {
[DllImport("TestUnityDLL", EntryPoint="TestAdd")]
private static extern int TestAdd(int x, int y);
int i = TestAdd(12, 23);
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnGUI(){
GUI.Button(new Rect(10,10,200,100), "TestUnityDll:"+i);
}
}
已知问题
- 64位版本的Unity可能需要在Plugins目录下同时存在32位和64位版本的DLL文件,否则会提示找不到DLL(DllNotFoundException)的错误
。