描述了使用插件在 Unity 之外创建的一组代码,用于在 Unity 中创建功能。在 Unity 中可以使用两种插件:托管插件(使用 Visual Studio 等工具创建的托管 .NET 程序集)和原生插件(特定于平台的原生代码库)。更多信息
参见 词汇表 用于 macOS 应用程序,使用中间语言到 C++ (./scripting-backends-il2cpp)。
IL2CPP 是一个完全支持的脚本后端,您可以在构建 macOS 播放器项目时将其用作 Mono 的替代方案。
当您使用 IL2CPP 构建项目时,Unity 会将来自脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间推移修改组件属性并以任何您喜欢的方式响应用户输入。更多信息
参见 词汇表和程序集的中间语言 (IL) 代码转换为 C++,然后再创建原生二进制文件。请参阅IL2CPPUnity 开发的脚本后端,您可以在构建某些平台的项目时将其用作 Mono 的替代方案。更多信息
参见 词汇表以获取更多信息。
使用 IL2CPP 脚本后端时,您可以将 C++ (.cpp) 代码文件直接添加到 Unity 项目中。这些 C++ 文件充当检查器一个 Unity 窗口,显示有关当前选定的游戏对象、资源或项目设置的信息,允许您检查和编辑值。更多信息
参见 词汇表中的插件。如果您将 C++ 文件配置为与 macOS 播放器兼容,则 Unity 会将它们与从托管程序集生成的 C++ 代码一起编译。请参阅导入和配置插件以获取有关插件配置的更多信息。
生成的 C++ 代码将这些函数链接在一起,无需单独的动态链接库 (DLL)。无需使用 DLL 名称,而是使用 "__Internal"
关键字使 C++ 链接器负责解析函数,而不是在运行时加载它们。例如
[DllImport("__Internal")]
private static extern int
CountLettersInString([MarshalAs(UnmanagedType.LPWStr)]string str);
您可以在 NativeFunctions.cpp 中按如下方式定义此类函数
extern "C" __declspec(dllexport) int __stdcall CountLettersInString(wchar_t* str)
{
int length = 0;
while (*str++ != nullptr)
length++;
return length;
}
当链接器解析函数调用时,托管端函数声明中的错误会导致链接器错误,而不是运行时错误。这意味着在运行时无需进行动态加载,函数可以直接从 C# 调用。这降低了 P/Invoke
调用的性能开销。