包含此页的版本:
不含此页的版本:
您可以使用 IL2CPP 作为 Mono 的替代方案,用于脚本后端在 Unity 中为脚本提供支持的框架。Unity 支持三种不同的脚本后端,具体取决于目标平台:Mono、.NET 和 IL2CPP。但是,通用 Windows 平台仅支持两个:.NET 和 IL2CPP。更多信息
请参阅术语表为 Windows Player 构建项目时。
当您使用 IL2CPP 构建项目时,Unity 会将 IL 代码从脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性以及以您喜欢的任何方式响应用户输入。更多信息
请参阅术语表在创建本机二进制文件之前,将程序集转换为 C++。 看IL2CPP:Unity 开发的脚本后端,在为某些平台构建项目时,可以将其用作 Mono 的替代品。更多信息
请参阅术语表了解更多信息。
使用 IL2CPP 脚本后端时,您可以将C++ (.cpp) 代码文件直接添加到 Unity 项目中。C++文件充当插件中的插件检查器一个Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
请参阅术语表. 如果将 C++ 文件配置为与 Windows 播放器兼容,Unity 会将它们与从托管程序集生成的 C++ 代码一起编译。
要查看C++文件的插件导入器设置,请单击.cpp文件,然后在检查器的平台设置部分中选择相应的 Windows 选项:
由于这些函数与生成的 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 的项目是通用的:
| 文件: | 描述: |
|---|---|
| a_Data | 包含游戏数据的文件夹。 |
| a.exe | 主游戏可执行文件。 |
| UnityCrashHandler64.exe | 崩溃处理程序可执行文件。 |
| UnityPlayer.dll | 包含所有本机代码的 Unity Player 库。 |
| WinPixEventRuntime.dll | PIX for Windows 运行时。此文件仅存在于开发版本开发版本包括调试符号并启用性能分析器。更多信息 请参阅术语表. |
| a_BackUpThisFolder_ButDontShipItWithYourGame | 包含调试游戏所需数据的文件夹,包括 PDB(调试信息)文件和从脚本生成的 C++ 代码。您应该为每个发布的版本备份此文件夹,但不要重新分发它。 |
| GameAssembly.dll | 包含 IL2CPP 运行时和所有脚本代码的库。 |
| 符号地图 | 包含所有托管函数地址及其长度的列表的文件。IL2CPP 需要它来解析托管堆栈跟踪。如果删除它,您仍然可以运行您的游戏,但不能保证异常将生成合理的调用堆栈。 |