版本:Unity 6 (6000.0)
语言:English
导入和配置插件
原生插件

托管插件

托管插件在 Unity 外部创建的一组代码,用于在 Unity 中创建功能。Unity 中可以使用两种类型的插件:托管插件(使用 Visual Studio 等工具创建的托管 .NET 程序集)和原生插件(特定于平台的原生代码库)。更多信息
参见 术语表
是您在 Unity 外部创建和编译的.NET 程序集,生成动态链接库 (DLL),可以使用 Visual Studio 等工具。

这与标准 C#脚本一段代码,允许您创建自己的组件,触发游戏事件,随时间推移修改组件属性并以任何您喜欢的方式响应用户输入。更多信息
参见 术语表
的过程不同,Unity 将标准 C# 脚本存储为 Unity 项目中 Assets 文件夹中的源文件。Unity 会在标准 C# 脚本发生更改时对其进行编译,而 DLL 是预编译的,不会发生更改。您可以将编译后的 .dll 文件添加到您的项目中,并将其中包含的类附加到游戏对象Unity 场景中的基本对象,可以代表角色、道具、场景、摄像机、路径点等。游戏对象的函数由附加到它的组件定义。更多信息
参见 术语表
,就像标准脚本一样。

有关 C# 中托管代码的更多信息,请参阅Microsoft 的什么是托管代码?文档

托管插件仅包含 .NET 代码,这意味着它们无法访问 .NET 库不支持的任何功能。但是,标准 .NET 工具可以访问托管代码,Unity 使用这些工具来编译脚本。

在 Unity 中使用 DLL 时,您需要完成比使用脚本时更多的步骤。但是,在某些情况下,您可能会发现创建和添加 .dll 文件到您的 Unity 项目中会很有帮助,例如

  • 您希望在代码中使用 Unity 不支持的编译器。
  • 您希望添加 .dll 文件中的第三方 .NET 代码。
  • 您希望向 Unity 提供代码但不提供源代码。

本页面介绍了您可以用来创建托管插件使用 Visual Studio 等工具创建的托管 .NET 程序集,用于在 Unity 中使用。更多信息
参见 术语表
的通用方法,以及如何创建托管插件并使用 Visual Studio 设置调试会话。

创建托管插件

要创建托管插件,您需要创建一个 DLL。为此,您需要一个合适的编译器,例如

并非所有生成 .NET 代码的编译器都与 Unity 兼容,因此您应该使用一些可用代码测试编译器,然后再使用它进行大量工作。创建 DLL 的方法取决于 DLL 是否包含 Unity API 代码

  • 如果 DLL 包含 Unity API 代码,则需要在编译之前使 Unity 自己的 DLL 可供编译器使用
    1. 要查找 Unity DLL
      • 在 Windows 上,转到:C:\Program Files\Unity\Hub\Editor\<version-number>\Editor\Data\Managed\UnityEngine
      • 在 macOS 上
        1. 在您的计算机上找到 Unity.app 文件。macOS 上 Unity DLL 的路径为:/Applications/Unity/Hub/Editor/<version-number>/Unity.app/Contents/Managed/UnityEngine
        2. 右键单击 Unity.app
        3. 选择显示包内容
    2. UnityEngine 文件夹包含许多模块的 .dll 文件。引用它们以使其可供您的脚本使用。某些命名空间还需要引用 Unity 项目中编译的库(例如,UnityEngine.UI)。在项目文件夹的目录中找到它:~\Library\ScriptAssemblies
  • 如果 DLL 不包含 Unity API 代码,或者您已使 Unity DLL 可用,请按照编译器的文档编译 .dll 文件。用于编译 DLL 的确切选项取决于您使用的编译器。例如,Roslyn 编译器 csc 的命令行在 macOS 上可能如下所示

csc /r:/Applications/Unity/Hub/Editor/<version-number>/Unity.app/Contents/Managed/UnityEngine.dll /target:library /out:MyManagedAssembly.dll /recurse:*.cs

在此示例中

  • 使用 /r 选项指定要包含在构建中的库的路径,在本例中为 UnityEngine 库。
  • 使用 /target 选项指定所需的构建类型;“library”表示 DLL 构建。
  • 使用 /out 指定库的名称,在本例中为“MyManagedAssembly.dll”。
  • 添加要包含的源文件名称。使用 /recurse 方法添加当前工作目录和任何子文件夹中以“.cs”结尾的所有文件。生成的 .dll 文件将出现在与源文件相同的文件夹中。

使用托管插件

编译 DLL 后,您可以像任何其他资源一样将 .dll 文件拖放到 Unity 项目中。然后您可以

  • 展开托管插件以查看库中的各个类。
  • 将派生自 MonoBehaviour 的类拖到游戏对象上。
  • 从其他脚本直接使用非 MonoBehaviour 类。
An expanded DLL with the classes visible
一个展开的 DLL,其中显示了可见的类

使用 Visual Studio 创建 DLL

本节介绍

  • 如何使用 Visual Studio 构建和集成简单的 DLL 示例
  • 如何在 Unity 中为 DLL 准备调试会话。

设置项目

  1. 打开 Visual Studio 并创建一个新项目。
  2. 选择文件 > 新建 > 项目 > Visual C# > .Net Standard > 类库 (.NET Standard)
  3. 将以下信息添加到新库中
    • 名称:命名空间(对于此示例,使用 DLLTest 作为名称)。
    • 位置:项目的父文件夹。
    • 解决方案名称:项目的文件夹。
  4. 使 Unity DLL 可供您的脚本使用。在 Visual Studio 中,打开解决方案资源管理器中引用的上下文菜单,然后选择添加引用 > 浏览 > 选择文件
  5. 选择所需的 .dll 文件,该文件位于 UnityEngine 文件夹中。

编写 DLL 代码

  1. 在此示例中,将解决方案浏览器中的默认类重命名为 MyUtilities
  2. 将其代码替换为以下代码
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

要为 Unity 中的 DLL 设置调试会话

  1. 在 Unity 中创建一个新项目,并将您构建的 .dll 文件(例如,<project folder>/bin/Debug/DLLTest.dll)复制到 Assets 文件夹中。
  2. 在 Assets 文件夹中创建一个名为 Test 的 C# 脚本。
  3. 将其内容替换为一个脚本,该脚本创建一个您在 DLL 中创建的类的新的实例,使用其函数并在控制台窗口中显示输出。例如,要为上面部分中的 DLL 创建一个测试脚本,请复制以下代码
using UnityEngine;
using System.Collections;
using DLLTest;

public class Test : MonoBehaviour {

     void Start () {
        MyUtilities utils = new MyUtilities();
        utils.AddValues(2, 3);
        print("2 + 3 = " + utils.c);
     }
    
     void Update () {
        print(MyUtilities.GenerateRandom(0, 100));
     }
}
  1. 将此脚本附加到场景场景包含游戏环境和菜单。将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您放置您的环境、障碍物和装饰,本质上是分段设计和构建您的游戏。更多信息
    参见 术语表
    中的游戏对象并单击播放。

Unity 在控制台窗口中显示 DLL 代码的输出

编译不安全的 C# 代码

不安全的 C# 代码是可以直接访问内存的代码。默认情况下它未启用,因为编译器无法验证它不会引入安全风险。

您可能希望使用不安全的代码来

  • 使用指针访问内存。
  • 分配原始内存。
  • 使用指针调用方法。

要启用对编译不安全的 C# 代码的支持,请转到编辑 > 项目设置 > 播放器 > 其他设置并启用允许不安全代码

有关更多信息,请参阅Microsoft 的不安全代码文档

其他资源

导入和配置插件
原生插件