Version: Unity 6.0 (6000.0)
语言 : 中文
Windows 完整性控制
Windows 构建设置参考

Windows 播放器:IL2CPP 脚本后端

您可以将__ IL2CPP__种由 Unity 开发的脚本后端,可在为某些平台构建项目时替代 Mono。更多信息
See in Glossary
用 Mono 的替代品,在为 Windows 播放器构建项目时用于编写后端脚本。

使用 IL2CPP 构建项目时,Unity 会在创建本机二进制文件之前将脚本和程序集内的 IL 代码转换为 C++。请参阅 IL2CPP 以了解更多信息。

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

使用 IL2CPP 脚本后端时,可将 C++ (.cpp) 代码文件直接添加到 Unity 项目中。这些 C++ 文件充当插件检视面板 (Plugin Inspector) 中的插件。如果将 C++ 文件配置为与 Windows 播放器兼容,则 Unity 会将这些文件与从托管程序集生成的 C++ 代码一起编译。

若要查看 C++ 文件的插件导入器设置,点击 .cpp 文件,在检视面板的平台设置部分选择适当的 Windows 选项:

关于 C++ 文件的插件导入器设置
关于 C++ 文件的插件导入器设置

因为函数与生成的 C++ 代码链接在一起,所以没有单独的 DLL 可进行 _P/Invoke 调用。因此,可使用 “__Internal” 关键字代替 DLL 名称,从而使 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++ != L'\0')
        length++;
    return length;
}

因为由链接器负责解析函数调用,所以在托管端的函数声明(在托管运行时执行的 C# 代码)中发生的任何错误都会生成链接器错误而不是运行时错误。这意味着,在运行时无法进行动态加载,而是直接从 C# 调用函数,从而显著降低了 P/Invoke 调用的性能开销。

Unity 使用与生成的 C++ 代码相同的 C++ 编译器参数编译源代码插件,这些参数无法修改。如果某些插件源代码需要控制 C++ 编译器参数,则必须改为构建原生插件。有关更多信息,请参阅原生插件

IL2CPP 构建文件

使用 IL2CPP 脚本后端的项目通常会生成以下文件:

构建期间生成的 IL2CPP 文件
构建期间生成的 IL2CPP 文件

以下文件是使用 IL2CPP 的项目共有的:

文件: 描述:
a_Data 包含游戏数据的文件夹。
a.exe 主游戏可执行文件。
UnityCrashHandler64.exe 崩溃处理程序可执行文件。
UnityPlayer.dll 包含所有本机代码的 Unity Player 库。
WinPixEventRuntime.dll PIX for Windows 运行时。此文件仅存在于开发构建中。
a_BackUpThisFolder_ButDontShipItWithYourGame 包含调试游戏所需数据的文件夹,包括 PDB(调试信息)文件和脚本生成的 C++ 代码。应为发布的每个构建备份此文件夹,但不要重新分发它。
GameAssembly.dll 包含 IL2CPP 运行时和所有脚本代码的库。
SymbolMap 包含所有托管函数地址及其长度的列表的文件。IL2CPP 需要此文件来解析托管堆栈跟踪。如果将其删除,仍然可以运行游戏,但无法保证异常会生成合理的调用栈。

其他资源:

Windows 完整性控制
Windows 构建设置参考