Version: Unity 6.0 (6000.0)
语言 : 中文
适用于 macOS 的深度链接
针对 macOS 进行构建和交付

将 IL2CPP 与 macOS 结合使用

描述了在利用“中间语言转 C++” 技术(路径为./scripting-backends-il2cpp)的 macOS 应用程序中,插件的使用方法。

IL2CPP 是一种完全受支持的脚本后端,可在为 macOS 播放器构建项目时替代 Mono。

使用__ IL2CPP__种由 Unity 开发的脚本后端,可在为某些平台构建项目时替代 Mono。更多信息
See in Glossary
构建项目时,Unity 会先将脚本和程序集的中间语言 (IL) 代码转换为 C++ 代码,然后再创建原生二进制文件。请参阅 IL2CPP 以了解更多信息。

适用于 IL2CPP 的 C++ 源代码插件

使用 IL2CPP 脚本后端时,可将 C++ (.cpp) 代码文件直接添加到 Unity 项目中。这些 C++ 文件在检视面板中起到插件的作用。如果将 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 调用的性能开销。

其他资源

适用于 macOS 的深度链接
针对 macOS 进行构建和交付