Unity 3D 调用DLL的方法

70 篇文章 0 订阅

接触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 plain copy
  1. #if defined (EXPORTBUILD)  
  2. # define _DLLExport __declspec (dllexport)  
  3. # else  
  4. # define _DLLExport __declspec (dllimport)  
  5. #endif  
  6.   
  7. extern "C"  int _DLLExport MyADD(int x,int y);  


代码文件 

//   DLL.cpp  

[cpp]  view plain copy
  1. //宏定义  
  2. #define  EXPORTBUILD  
  3.   
  4. //加载头文件  
  5. #include "DLL.h"  
  6.   
  7. //设置函数  
  8. int _DLLExport MyADD(int x,int y)  
  9. {  
  10.     return x+y;  
  11. }  

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

 

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

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

 

[csharp]  view plain copy
  1. using UnityEngine;    
  2.   
  3. using System.Collections;    
  4.   
  5. using System.Runtime.InteropServices;    
  6.   
  7. public class NewBehaviourScript : MonoBehaviour {  
  8.         
  9.       [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 plain copy
  1. using UnityEngine;  
  2. using System.Runtime.InteropServices;  
  3.   
  4. class SomeScript : MonoBehaviour {  
  5.    // This tells unity to look up the function FooPluginFunction  
  6.    // inside the plugin named "PluginName"  
  7.    [DllImport ("PluginName")]  
  8.    private static extern int MyADD(int x,int y);  
  9.   
  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机器测试,不知道是不是可以用,不过官方文档这么写的,应该不是什么大问题。

 

 


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

参考文档:http://msdn.microsoft.com/zh-cn/library/ms235636(v=vs.110).aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity调用DLL有几种常见的方法。以下是其中的两种方法: 1. 使用DllImport特性: - 将DLL文件放置在Unity项目的Assets/Plugins文件夹下(如果没有该文件夹,可以手动创建)。 - 在C#脚本中,使用[System.Runtime.InteropServices.DllImport]特性声明要调用DLL函数。例如: ```csharp using System.Runtime.InteropServices; public class MyScript : MonoBehaviour { [DllImport("mydll")] // 替换为实际的DLL名称 private static extern void MyDllFunction(); void Start() { MyDllFunction(); // 调用DLL函数 } } ``` 2. 使用Unity的插件系统: - 创建一个新的C#类,然后将其放置在Unity项目的Assets/Editor文件夹下。 - 在该类中,使用UnityEditor命名空间下的PluginImporter类来导入DLL并设置相关属性。例如: ```csharp using UnityEditor; public class MyDllImporter : AssetPostprocessor { private void OnPreprocessAssembly() { if (assetPath.Contains("mydll")) // 替换为实际的DLL名称 { PluginImporter pluginImporter = (PluginImporter)assetImporter; pluginImporter.SetCompatibleWithEditor(true); pluginImporter.SetCompatibleWithAnyPlatform(false); pluginImporter.SetCompatibleWithPlatform(BuildTarget.StandaloneWindows, true); // 替换为实际的目标平台 } } } ``` - 在Unity编辑器中,导入DLL文件,并确保在Inspector窗口中设置了正确的平台兼容性。 请注意,调用DLL可能涉及到特定的函数签名和参数传递方式,具体取决于DLL的实现。因此,请确保你了解DLL的使用方法和要求,并按照其提供的文档进行调用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值