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++ コードでまとめてリンクされているため、 への別の DLL はありません。このため、DLL 名の代わりに キーワードを使用します。これにより、関数をランタイムにロードするのではなく、関数を解決するのは C++ リンカーの役割となります。以下はその例です。
_P/Invoke“__Internal”[DllImport("__Internal")]private static extern intCountLettersInString([MarshalAs(UnmanagedType.LPWStr)]string str);
このような関数を で以下のように定義することができます。
NativeFunctions.cppextern "C" __declspec(dllexport) int __stdcall CountLettersInString(wchar_t* str){ int length = 0; while (*str++ != L'\0') length++; return length;}
リンカーが関数呼び出しを解決するため、マネージ側の関数宣言 (マネージランタイムで実行される C# コード) で発生するエラーは、ランタイムエラーではなくリンカーエラーになります。このため、ランタイム中に動的なロードは行われず、C# から関数が直接呼び出されることで、 呼び出しのパフォーマンスオーバーヘッドが大幅に減少します。
P/InvokeUnity は、生成された C++ コードと同じ C++ コンパイラー引数を使用してソースコードプラグインをコンパイルしますが、これは変更できません。プラグインソースコードの一部で C++ コンパイラー引数を制御する必要がある場合は、代わりにネイティブのプラグインをビルドする必要があります。詳細については、ネイティブプラグイン に関するドキュメントを参照してください。
IL2CPP ビルドファイル
IL2CPP スクリプティングバックエンドを使用するプロジェクトでは通常、以下のファイルが生成されます。

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