Version: 2022.3
言語: 日本語
macOS のディープリンク
macOS アプリケーションのビルドと配信

IL2CPP を macOS で使用する

Intermediate Language To C++ (IL2CPP) を使用した macOS アプリケーションのプラグインの使用方法について説明します。

IL2CPP は完全にサポートされたスクリプティングバックエンドで、macOS Player のプロジェクトをビルドする場合に Mono の代わりに使用できます。

IL2CPP を使用してプロジェクトをビルドすると、Unity はネイティブバイナリを作成する前に、スクリプトとアセンブリの中間言語 (IL) コードを C++ に変換します。詳細については、IL2CPPを を参照してください。

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

IL2CPP スクリプティングバックエンドを使用するときに、C++ (.cpp) コードファイルを直接 Unity プロジェクトに加えることができます。これらの C++ ファイルは Inspector 内でプラグインとして機能します。C++ ファイルを macOS Player と互換性を持つように設定すると、Unity はマネージアセンブリから生成された C++ コードとともにそれらをコンパイルします。プラグインの設定の詳細については、プラグインの設定の詳細については、プラグインのインポートと設定を参照してください。

生成された C++ コードによって関数がリンクされるため、個別のダイナミックリンクライブラリ (DLL) が不要になります。DLL 名を使用する代わりに "__Internal" キーワードを使用して、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++ != nullptr)
        length++;
    return length;
}

リンカーが関数呼び出しを解決する際に、マネージ側の関数宣言のエラーは、ランタイムエラーではなくリンカーエラーになります。これは、関数が C# から直接呼び出されるため、ランタイムに動的なロードを行う必要がないことを意味します。これにより、P/Invoke 呼び出しのパフォーマンスオーバーヘッドが減少します。

その他の参考資料

macOS のディープリンク
macOS アプリケーションのビルドと配信