分享

Unity 3D 调用DLL的方法

 阿修罗之狮猿授 2016-03-02
 接触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 /////////////////////////////

  1. #if defined (EXPORTBUILD)  # define _DLLExport __declspec (dllexport)  # else  # define _DLLExport __declspec (dllimport)  #endif    extern "C"  int _DLLExport MyADD(int x,int y);   
复制代码


代码文件

//////////////////   DLL.cpp ////////////////////////////

  1. //宏定义  #define  EXPORTBUILD    //加载头文件  #include "DLL.h"    //设置函数  int _DLLExport MyADD(int x,int y)  {      return x+y;  }   
复制代码

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


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

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


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

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



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


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

Android环境:
  1. 01.using UnityEngine;  
  2. 02.using System.Runtime.InteropServices;  
  3. 03.  
  4. 04.class SomeScript : MonoBehaviour {  
  5. 05.   // This tells unity to look up the function FooPluginFunction  
  6. 06.   // inside the plugin named "PluginName"  
  7. 07.   [DllImport ("PluginName")]  
  8. 08.   private static extern int MyADD(int x,int y);  
  9. 09.  
  10. 10.   void Awake () {  
  11. 11.      // Calls the FooPluginFunction inside the PluginName plugin  
  12. 12.      // And prints 5 to the console  
  13. 13.     int i = MyADD(5,7);      
  14. 14.   }  
  15. 15.}   
复制代码

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




参考文档: http://game./Manual/Plugins.html#AndroidPlugins

来源:http://www.cnblogs.com/oldman/articles/2501486.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多