托管插件在 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 项目中会很有帮助,例如
本页面介绍了您可以用来创建托管插件使用 Visual Studio 等工具创建的托管 .NET 程序集,用于在 Unity 中使用。更多信息
参见 术语表的通用方法,以及如何创建托管插件并使用 Visual Studio 设置调试会话。
要创建托管插件,您需要创建一个 DLL。为此,您需要一个合适的编译器,例如
并非所有生成 .NET 代码的编译器都与 Unity 兼容,因此您应该使用一些可用代码测试编译器,然后再使用它进行大量工作。创建 DLL 的方法取决于 DLL 是否包含 Unity API 代码
C:\Program Files\Unity\Hub\Editor\<version-number>\Editor\Data\Managed\UnityEngine
Unity.app
文件。macOS 上 Unity DLL 的路径为:/Applications/Unity/Hub/Editor/<version-number>/Unity.app/Contents/Managed/UnityEngine
Unity.app
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 项目中。然后您可以
本节介绍
DLLTest
作为名称)。MyUtilities
。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);
}
}
}
要为 Unity 中的 DLL 设置调试会话
<project folder>/bin/Debug/DLLTest.dll
)复制到 Assets 文件夹中。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));
}
}
Unity 在控制台窗口中显示 DLL 代码的输出
不安全的 C# 代码是可以直接访问内存的代码。默认情况下它未启用,因为编译器无法验证它不会引入安全风险。
您可能希望使用不安全的代码来
要启用对编译不安全的 C# 代码的支持,请转到编辑 > 项目设置 > 播放器 > 其他设置并启用允许不安全代码。
有关更多信息,请参阅Microsoft 的不安全代码文档。