ドキュメント

Unity Engine

Unity Engine

Windows Player: IL2CPP スクリプティングバックエンド

Use IL2CPP with Windows Player and add compatible C++ source code plug-ins to your build.
読み終わるまでの所要時間 7 分最終更新 1ヶ月前

Windows Player 用のプロジェクトをビルドする場合に、スクリプティングバックエンドとして Mono の代わりに IL2CPP を使用できます。
IL2CPP を使用してプロジェクトをビルドする場合、Unity はネイティブのバイナリを作成する前に、IL コードをスクリプトやアセンブリから C++ に変換します。詳細は IL2CPP を参照してください。

IL2CPP 用の C++ ソースコードプラグイン

IL2CPP スクリプティングバックエンドを使用するときに、C++ (.cpp) コードファイルを直接 Unity プロジェクトに加えることができます。C++ ファイルは Plugin Inspector 内でプラグインとして機能します。Windows Player と互換性を持つように C++ ファイルを設定すると、Unity はマネージアセンブリから生成された C++ コードと共にそれらをコンパイルします。
C++ ファイルのプラグインインポーター設定を表示するには、.cpp ファイルをクリックし、Inspector のプラットフォーム設定セクションで適切な Windows オプションを選択します。

C++ ファイルのプラグインインポーターの設定

関数は生成された C++ コードでまとめてリンクされているため、
_P/Invoke
への別の DLL はありません。このため、DLL 名の代わりに
“__Internal”
キーワードを使用します。これにより、関数をランタイムにロードするのではなく、関数を解決するのは C++ リンカーの役割となります。以下はその例です。
[DllImport("__Internal")]private static extern intCountLettersInString([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 を使用するプロジェクトに共通です。

ファイル

説明:

a_Dataゲームデータを持つフォルダー
a.exeメインのゲーム実行ファイル
UnityCrashHandler64.exeクラッシュハンドラの実行ファイル
UnityPlayer.dllすべてのネイティブコードを含む Unity Player ライブラリ
WinPixEventRuntime.dllWindows ランタイムの PIX。このファイルは開発ビルドにのみ存在します。
a_BackUpThisFolder_ButDontShipItWithYourGameゲームのデバッグに必要なデータを格納するフォルダー。PDB (デバッグ情報) ファイルや、スクリプトから生成された C++ コードなどが含まれます。このフォルダーは、ビルドを出荷するたびにバックアップする必要がありますが、再配布しないでください。
GameAssembly.dllIL2CPP ランタイムとすべてのスクリプトコードを含むライブラリ
SymbolMapすべてのマネージ関数のアドレスとその長さのリストを含むファイル。IL2CPP はマネージスタックトレースを解決するために、これを必要とします。これを削除してもゲームは実行できますが、例外によって適切なコールスタックが生成されるという保証はありません。

その他の参考資料