托管 插件在Unity外部创建的一组代码,用于在Unity中创建功能。在Unity中可以使用两种类型的插件:托管的插件(通过Visual Studio等工具创建的.NET程序集)和本地插件(特定平台的本地代码库)。 更多信息
在术语表中查看 是您在Unity之外创建和编译的.NET程序集,以动态链接库(DLL)的形式,使用Visual Studio等工具。
这是一个与标准C# 脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性并以任何您喜欢的方式响应用户输入。 更多信息
在术语表中查看 不同的过程,它将Unity存储在您的Unity项目中Assets文件夹中的源文件中。Unity在更改时编译标准C#脚本,而DLL则是预编译的,不进行更改。您可以将编译的.dll文件添加到项目中,并以标准脚本相同的方式将其包含的类附加到 GameObjectUnity场景中的基本对象,可以表示角色、道具、风景、相机、航标等。GameObject的功能由附加到其上的组件定义。 更多信息
在术语表中查看
有关C#中托管代码的更多信息,请参阅Microsoft的“什么是托管代码?”文档。
托管插件仅包含.NET代码,这意味着它们无法访问.NET库不支持的功能。但是,托管代码可以访问Unity用于编译脚本的标准.NET工具。
当您在Unity中使用DLL时,您必须完成的步骤比使用脚本时更多。然而,在某些情况下,您可能发现创建并将.dll文件添加到Unity项目中有助于您,例如
此页面解释了您可以用于创建 托管插件一个由类似Visual Studio等工具创建,用于Unity的托管.NET程序集。 更多信息
在术语表中查看 的一般方法,以及如何使用Visual Studio创建托管插件和设置调试会话。
要创建托管插件,您需要创建一个DLL。为了做到这一点,您需要合适的编译器,例如
并非所有生成.NET代码的编译器都与Unity兼容,在对其进行重大工作时,您应该使用一些可用的代码来测试编译器。创建DLL的方法取决于DLL是否包含Unity API代码
C:\Program Files\Unity\Hub\Editor\<版本号>\Editor\Data\Managed\UnityEngine
Unity.app
文件。macOS上Unity DLL的路径是: /Applications/Unity/Hub/Editor/<版本号>/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/<版本号>/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项目中。然后
本节解释了
文件
> 新建
> 项目
> Visual C#
> .Net Standard
> 类库 (.NET Standard)
。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的调试会话
<项目文件夹>/bin/Debug/DLLTest.dll
)复制到Assets文件夹中。控制台
窗口中显示输出。例如,要为上面的部分创建一个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));
}
}
Unity将在控制窗口中显示DLL代码的输出。
不安全C#代码是能够直接访问内存的代码。默认情况下不启用此代码,因为编译器无法验证它不会引入安全风险。
您可能想要使用不安全代码来
要启用编译不安全C#代码的支持,请转到编辑 > 项目设置 > 播放器 > 其他设置并启用允许不安全代码。
有关更多信息,请参阅Microsoft关于不安全代码的文档。