包含此页的版本:
不含此页的版本:
管理插件在 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 项目会很有帮助,例如:
本页介绍可用于创建托管插件使用 Visual Studio 等工具创建的托管 .NET 程序集,用于 Unity 。更多信息
请参阅术语表,以及如何使用 Visual Studio 创建托管插件和设置调试会话。
若要创建托管插件,需要创建 DLL。为此,您需要一个合适的编译器,例如:
并非所有生成 .NET 代码的编译器都与 Unity 兼容,因此,在对编译器进行大量工作之前,应先使用一些可用代码测试编译器。有关 Unity 当前支持的 .NET 配置文件的信息,请参阅 .NET 配置文件支持。
用于创建 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指定所需构建类型的选项;“库”表示 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#代码的支持,请转到 编辑>项目设置(Project Settings) > 播放器(Player) > 其他设置(Other Settings),然后启用 允许不安全的代码(Allow Unsafe Code)。
有关详细信息,请参阅 Microsoft 的不安全代码文档。