Version: 6000.3
语言: 中文
Windows 完整性控制
D3D12 API 和图形作业模式配置

Windows Player:IL2CPP 脚本后端

您可以使用 IL2CPP 作为 Mono 的替代方案,用于脚本后端Unity 中为脚本提供支持的框架。Unity 支持三种不同的脚本后端,具体取决于目标平台:Mono、.NET 和 IL2CPP。但是,通用 Windows 平台仅支持两个:.NET 和 IL2CPP。更多信息
请参阅术语表
为 Windows Player 构建项目时。

当您使用 IL2CPP 构建项目时,Unity 会将 IL 代码从脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性以及以您喜欢的任何方式响应用户输入。更多信息
请参阅术语表
在创建本机二进制文件之前,将程序集转换为 C++。 看IL2CPPUnity 开发的脚本后端,在为某些平台构建项目时,可以将其用作 Mono 的替代品。更多信息
请参阅术语表
了解更多信息。

IL2CPP 的 C++ 源代码插件

使用 IL2CPP 脚本后端时,您可以将C++ (.cpp) 代码文件直接添加到 Unity 项目中。C++文件充当插件中的插件检查器一个Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
请参阅术语表
. 如果将 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++ 编译器参数编译源代码插件,无法修改。如果某些插件在 Unity 外部创建的一组代码,用于在 Unity 中创建功能。可以在 Unity 中使用两种插件:托管插件(使用 Visual Studio 等工具创建的托管 .NET 程序集)和本机插件(特定于平台的本机代码库)。详细信息
请参阅术语表
源代码需要控制 C++ 编译器参数,您必须改为构建本机插件。有关详细信息,请参阅本机插件Unity 外部创建以在 Unity 中使用的特定于平台的本机代码库。允许您访问 OS 调用和第三方代码库等功能,否则这些功能将无法用于 Unity。更多信息
请参阅术语表
.

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 运行时和所有脚本代码的库。
符号地图 包含所有托管函数地址及其长度的列表的文件。IL2CPP 需要它来解析托管堆栈跟踪。如果删除它,您仍然可以运行您的游戏,但不能保证异常将生成合理的调用堆栈。

其他资源:

Windows 完整性控制
D3D12 API 和图形作业模式配置