unity3d调用DLL

 

 

 

接触Unity 3D 时间不长,看到网上有人问怎么通过Unity来调用Dll,而且发现这个问题似乎是用unity的朋友并不熟悉DLL的使用造成的,正好我使用过C++,对DLL还比较熟悉,因此写了一个小小的教程来谈谈unity的Dll调用方法。

1.创建DLL

困扰Unity人员的主要问题大概出于Dll不会生成。这个确实比较麻烦,我这里给出一个vs 2008中创建DLL的方法。

1)首先打开vs2008,当然2005或者2003也都差不多。我这里用的是2008.

在C++项目中选择 Win32程序,然后在控制台程序或者win32程序任选一个。 写上项目名字点创建。

2) 任选一个的原因是这里并不重要,重要的是下一步,创建以后会出现一下这个面板。 选下一步见如下选项:

注意,首先选DLL,证明我们这个程序是个dll项目。选“空项目”的目的是建一个计较干净的DLL程序,里面的代码都有我们手写完成,这样写过什么我们都知道。

3)创建项目,这样我们得到一个空项目,在这个项目中,除了几个文件加以外什么也没有,我们在文件夹上点右键,创建新项。在新项里面分别创建一个CPP文件和一个头文件。

4)得到如下的两个文件:起什么名字并不重要

5)以下是2个文件的代码:DLL的生成要说起来也一大堆的知识,我这里简单的说一下,dll的使用和生成用的宏不同,上面的代码主要是区分在不同环境中该使用那个宏,如果不理解就不要管了,你们只需要改最下面的哪个函数就行了。

头文件

/// DLL.h /

[cpp] view plaincopy
01.#if defined (EXPORTBUILD)
02.# define _DLLExport __declspec (dllexport)
03.# else
04.# define _DLLExport __declspec (dllimport)
05.#endif
06.
07.extern “C” int _DLLExport MyADD(int x,int y);

代码文件

// DLL.cpp

[cpp] view plaincopy
01.//宏定义
02.#define EXPORTBUILD
03.
04.//加载头文件
05.#include “DLL.h”
06.
07.//设置函数
08.int _DLLExport MyADD(int x,int y)
09.{
10. return x+y;
11.}

这样我们就生成了一个MyAdd()函数,传入两个数就会返回它们的和。 然后编译这个程序,会出现下面的对话框,那就证明你成功了!然后再把这个DLL文件放在你的unity工程的assert的Plugins(如果没有这个文件夹就手动创建一个)。

6) 在unity中创建一个C#脚本,调用我们刚刚生成的dll,在这里我们的DLL名字就叫DLL,所以写的是[DllImport ("DLL")] ,如果你的名字是Test.dll,那就写[DllImport ("Test")]

写一个GUI按钮上显示运行的结果。

[csharp] view plaincopy
01.using UnityEngine;
02.
03.using System.Collections;
04.
05.using System.Runtime.InteropServices;
06.
07.public class NewBehaviourScript : MonoBehaviour {
08.
09. [DllImport ("DLL")]
10. private static extern int MyADD(int x,int y);
11. int i = MyADD(5,7);
12. // Update is called once per frame
13. void Update () {}
14. void OnGUI()
15. {
16. GUI.Button(new Rect(1,1,200,100),”this DLL i = 5+7, i is ‘”+i+”‘”);
17. }
18.}

运行通过就可以在界面上看到

7)输出unity项目exe到目录,然后在目录中也添加Plugins目录,把DLL文件也考进去,然后点运行,呵呵 成功了吧!

以上是unity 输出exe到win32系统的情况,下来看一看如何在其他平台上调用DLL。

Android环境:

[csharp] view plaincopy
01.using UnityEngine;
02.using System.Runtime.InteropServices;
03.
04.class SomeScript : MonoBehaviour {
05. // This tells unity to look up the function FooPluginFunction
06. // inside the plugin named “PluginName”
07. [DllImport ("PluginName")]
08. private static extern int MyADD(int x,int y);
09.
10. void Awake () {
11. // Calls the FooPluginFunction inside the PluginName plugin
12. // And prints 5 to the console
13. int i = MyADD(5,7);
14. }
15.}

由于没有Android机器测试,不知道是不是可以用,不过官方文档这么写的,应该不是什么大问题。

 

 

 

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可 6私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值