通常,Unity 会在源发生变更时,将工程中的脚本作为源文件进行保存和编译。但是,它也可使用外部编译器将脚本编译为动态链接库 (DLL),然后可将生成的 DLL 添加至工程,并像普通脚本一样将其中的类附加至对象。
在 Unity 中使用脚本通常比使用 DLL 更简单方便,但可能需要访问第三方提供 的 DLL 格式的 Mono 代码。开发自己的代码时,可将代码编译到 DLL 并将其添加到 Unity 工程,即可使用 Unity 不支持的编译器(如 F#)。另外,可能需要提供 不含源的 Unity 代码(如资源商店 (Asset Store) 产品),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 文件拖放至 Unity 工程。DLL 资源含有一个小三角符号,可用它来区分库中的单独类。从 MonoBehaviour 派生出的类也可像一般脚本一样拖放至游戏对象 (Game Objects)。非 MonoBehaviour 类可直接在其他脚本中照常使用。
通过本部分,您将了解如何使用 MonoDevelop 和 Visual Studio(这两者是最受欢迎的可生成 .NET 库的集成开发环境 (IDE))构建和集成简单的 DLL 示例,本部分还将介绍如何准备 DLL 的调试会话。
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); } } }
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)); }
有关更多信息,请参阅调试程序页面。
Page last updated: 2013-06-27