在 Unity 工程 (Project) 中使用 DLL(动态库)

在 Unity 工程 (Project) 中使用 Mono DLL

通常,Unity 会在源发生变更时,将工程中的脚本作为源文件进行保存和编译。但是,它也可使用外部编译器将脚本编译为动态链接库 (DLL),然后可将生成的 DLL 添加至工程,并像普通脚本一样将其中的类附加至对象。

在 Unity 中使用脚本通常比使用 DLL 更简单方便,但可能需要访问第三方提供的 DLL 格式的 Mono 代码。开发自己的代码时,可将代码编译到 DLL 并将其添加到 Unity 工程,即可使用 Unity 不支持的编译器(如 F#)。另外,可能需要提供不含源的 Unity 代码(如资源商店 (Asset Store) 产品),DLL 可让您轻松完成此操作。

创建 DLL

要创建 DLL,首先需要一个合适的编译器。并非所有可生成 .NET 代码的编译器都与 Unity 兼容,因此,最好先使用一些可用的代码测试该编译器,再用它开展重要工作。如果 DLL 不包含依赖于 Unity API 的代码,只需使用相应的编译器选项将代码编译到 DLL。如需使用 Unity API,则要将 Unity 自带的 DLL 设置为与该编译器兼容。在 Mac 中,这些代码都包含在应用程序包中(可使用上下文菜单中的显示包内容 (Show Package Contents) 命令查看应用程序包的内部结构;右键单击或 ctrl+ 单击此 Unity 应用程序):

Unity DLL 的路径通常为

	/Applications/Unity/Unity.app/Contents/Frameworks/Managed/

... UnityEngine.dll 和 UnityEditor.dll 会调用这两个 DLL。

在 Windows 上,您可在 Unity 应用程序安装文件夹中找到 DLL。其路径通常为

	C:\Program Files\Unity\Editor\Data\Managed

...尽管其中的 DLL 名称与 Mac OS 上的 DLL 名称相同,

但用于编译 DLL 的确切选项将各不相同,具体取决于使用的编译器。例如,在 Mac OS 上,Mono C# 编译器的命令行 mcs 可能是这样的:-

	mcs -r:/Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll -target:library ClassesForDLL.cs 

在这里,-r 选项指定版本中要包含的库的路径,本例中为 UnityEngine 库。-target 选项指定所需的版本类型;“library” 一词用于选择 DLL 版本。最后,要编译的源文件名为ClassesForDLL.cs(这是以假设该文件位于当前工作文件夹下为前提,但如果需要,也可使用完整路径指定该文件)。如果一切进展顺利,生成的 DLL 文件不久后将作为源文件显示在同一文件夹下。

使用 DLL

编译完成后,只需像处理任何其他资源一样将 DLL 文件拖放至 Unity 工程。DLL 资源含有一个小三角符号,可用它来区分库中的单独类。从 MonoBehaviour 派生出的类也可像一般脚本一样拖放至游戏对象 (Game Objects)。非 MonoBehaviour 类可直接在其他脚本中照常使用。


含可视类的展开 DLL

MonoDevelop 和 Visual Studio 分步指南

通过本部分,您将了解如何使用 MonoDevelop 和 Visual Studio(这两者是最受欢迎的可生成 .NET 库的集成开发环境 (IDE))构建和集成简单的 DLL 示例,本部分还将介绍如何准备 DLL 的调试会话。

编写和构建 DLL

  1. 打开 MonoDevelop 或 Visual Studio。
  2. 在应用程序菜单上新建一个工程:
    • MonoDevelop:
      1. 在菜单上依次打开文件 (File) > 新建 (New) > 解决方案 (Solution)
      2. 选择 C# > 库 (Library)
    • Visual Studio:
      1. 在菜单上依次打开文件 (File) > 新建 (New) > 工程 (Project)
      2. 选择 Visual C# > 类库 (Class Library)
  3. 填充新库信息:
    • 名称 (Name) 即命名空间,本例中使用 “DLLTest”。
    • 位置 (Location) 即工程父文件夹所在位置。
    • 解决方案 (Solution) 名称 即工程文件夹的名称。
  4. 将引用添加至 Unity API:
    • MonoDevelop:
      1. 在解决方案 (Solution) 浏览器中打开(右击)引用 (References) 的上下文菜单,然后选择编辑 (Edit) 引用。
      2. 选择 .Net 程序集 (Assembly) 选项卡 > 文件系统 (File System) > 选择文件
    • Visual Studio:
      1. 在解决方案资源管理器 (Solution Explorer) 中打开(右击)引用 (References) 的上下文菜单,然后选择添加引用 (Add Reference)
      2. 选择选项浏览 (Browse) > 浏览 (Browse) > 选择文件
  5. 选择所需的 Unity API 文件:
    • MacOS:
      • <Applications>/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll
    • Windows:
      • <Program Files>\Unity\Editor\Data\Managed\UnityEngine.dll
  6. 在本例中,解决方案 (Solution) 浏览器将类重命名为 "MyUtilities",并使用以下代码代替其代码:

C#

using System;	
using UnityEngine;

namespace DLLTest {

	public class MyUtilities {

		public int c;

		public void AddValues(int a, int b) {
			c = a + b;	
		}

		public static int GenerateRandom(int min, int max) {
			System.Random rand = new System.Random();
			return rand.Next(min, max);
		}
	}
 }

  1. 最后,构建此工程以生成 DLL 文件及其调试符号。

在 Unity 中使用新建的 DLL

  1. 打开 Unity 并新建一个工程。
  2. 将构建文件 <project folder>/bin/Debug/DLLTest.dll 复制到 Assets 或子文件夹(例如 Plugins)
  3. 在本例中,在 Assets 中创建一个 C# 脚本,并命名为 “Test”,然后使用以下代码替换其中的内容:

C#

using UnityEngine;
using System.Collections;
using DLLTest;

void Start () {
	MyUtilities utils = new MyUtilities();
	utils.AddValues(2, 3);
	print("2 + 3 = " + utils.c);
 }

void Update () {
	print(MyUtilities.GenerateRandom(0, 100));
 }

  1. 最后,将脚本分配至场景中的对象(如主相机 (Main Camera)),然后运行此场景。您将在控制台 (Console) 窗口中看见输出。

设置 DLL 的调试会话

  1. 准备 DLL 的调试符号:
    • MonoDevelop:
      • 将构建文件 <project folder>/bin/Debug/DLLTest.dll.mdb 复制到 Assets(例如 Assets/Plugins/)
    • Visual Studio:
      1. 在命令提示符中执行 <Program Files>\Unity\Editor\Data\Mono\lib\mono\2.0\pdb2mdb.exe,将 <project folder>\bin\Debug\DLLTest.pdb 作为参数进行传递
      2. 将已转换的文件 <project folder>\bin\Debug\DLLTest.dll.mdb 复制到 Assets(例如Assets\Plugins\)
  2. 打开 MonoDevelop 中的 "Test" 脚本,务必在工具 (Tools) 菜单 (Windows) 或 MonoDevelop-Unity 菜单 (MacOS) 中启用 Unity 的调试程序:
    • 加载项管理器 (Add-in Manager) > 安装的选项卡 (Installed tab) > Unity > 选择 Mono Soft Debugger Support for Unity > 启用 (Enable)

有关更多信息,请参阅调试程序页面。

Page last updated: 2013-06-27

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity使用Matlab生成.dll文件的步骤如下: 1. 首先,确保你的计算机上已经安装了Matlab和Unity。 2. 在Matlab,编写你需要用于导出的函数代码。确保你的函数输入和输出参数是适用于Unity的数据类型,例如基本数据类型(int,float等)、数组或结构体。 3. 使用Matlab的“mcc”命令将你的Matlab代码编译成可执行文件,并同时生成C源文件。例如,在Matlab命令行输入: mcc -W lib:MyMatlabLib -T link:lib myMatlabFunction.m 这将生成一个名为“MyMatlabLib”(也可以自定义名称)的文件夹,并包含一个C源文件和其他必需的文件。 4. 打开Unity,在Assets文件夹下创建一个名为“Plugins”的文件夹。 5. 将之前生成的C源文件(通常是形如“MyMatlabLib.c”的文件)复制到“Plugins”文件夹。 6. 在Unity创建一个C#脚本,以调用你在Matlab编写并编译的函数。在脚本使用[DllImport]来导入.dll文件,并定义需要导入的函数签名。例如: [DllImport("MyMatlabLib")] private static extern int myMatlabFunction(int input1, float input2, ref float output); 7. 在Unity的任何可执行代码(例如Start或Update方法)使用刚刚定义的函数。例如: float outputValue = 0.0f; int result = myMatlabFunction(10, 5.0f, ref outputValue); 这将调用你在Matlab编写的函数,将输入参数(10和5.0)传递给函数,并将计算结果存储在outputValue变量。 8. 现在,你可以在Unity使用Matlab函数生成的.dll文件了。 需要注意的是,在使用Matlab生成.dll文件时,确保你的Matlab代码和Unity的项目具有相同的位数和平台(32位或64位)。 另外,还需要注意的是,.dll文件不能直接在移动设备上使用,因为移动设备不支持生成和使用.dll文件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值