Version: 6000.3
语言: 中文
导入和配置插件
本机插件

托管插件

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

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

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

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

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

  • 您希望在代码中使用 Unity 不支持的编译器。
  • 你想要在.dll文件中添加第三方 .NET 代码。
  • 你希望在没有源代码的情况下向 Unity 提供代码。

本页介绍可用于创建托管插件使用 Visual Studio 等工具创建的托管 .NET 程序集,用于 Unity 。更多信息
请参阅术语表
,以及如何使用 Visual Studio 创建托管插件和设置调试会话。

创建托管插件

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

并非所有生成 .NET 代码的编译器都与 Unity 兼容,因此,在对编译器进行大量工作之前,应先使用一些可用代码测试编译器。有关 Unity 当前支持的 .NET 配置文件的信息,请参阅 .NET 配置文件支持

用于创建 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指定所需构建类型的选项;“库”表示 DLL 生成。
  • /out以指定库的名称,在本例中为“MyManagedAssembly.dll”。
  • 添加要包含的源文件的名称。使用/recurse方法将当前工作目录和任何子文件夹中以“.cs”结尾的所有文件添加到您。生成的.dll文件显示在与源文件相同的文件夹中。

使用托管插件

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

  • 展开托管插件以查看库中的单独类。
  • 将派生自 MonoBehaviour 的类拖到游戏对象上。
  • 直接从其他脚本使用非 MonoBehaviour 类。
具有可见类的扩展 DLL
具有可见类的扩展 DLL

使用 Visual Studio 创建 DLL

本节解释:

  • 如何生成简单的 DLL 示例并将其与 Visual Studio 集成
  • 如何在 Unity 中为 DLL 准备调试会话。

设置项目

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

对 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#代码的支持,请转到 编辑>项目设置(Project Settings) > 播放器(Player) > 其他设置(Other Settings),然后启用 允许不安全的代码(Allow Unsafe Code)。

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

其他资源

导入和配置插件
本机插件