UnityPlayerActivity Java コードの拡張
Using Java or Kotlin source files as plug-ins

Android の ネイティブ (C++) プラグイン

Unityは、C/C++ で書かれ、共有ライブラリ (.so) または静的ライブラリ (.a) にパッケージ化された Android 用のネイティブプラグインをサポートします。IL2CPP スクリプティングバックエンドを使用する場合、C/C++ソースファイルをプラグインとして使用することができ、Unity は それらを IL2CPP 生成ファイルとともに コンパイルします。これには、拡張子 .c、.cc、.cpp、.h を持つすべての C/C++ ソースファイルが含まれます。

Android 用の C++ プラグインをビルドするには、Android NDK を使用します。共有ライブラリを作成するために必要な手順に慣れてください。同じことが静的ライブラリにも当てはまります。

プラグインを実装するために C++ を使用している場合は、名前のマングリングの問題 を避けるために、メソッドが C リンケージで宣言されていることを確認する必要があります。デフォルトでは、プラグインの拡張子が .c の C ソースファイルのみが C リンケージ (C++ ではなく) を持っています。

extern "C" {
  float Foopluginmethod ();
}

ライブラリをビルドした後、出力された .so ファイルを Unity プロジェクト内の Assets/Plugins/Android ディレクトリにコピーします。Inspector で Android のチェックボックスをオンにして .so ファイルを Android に適応させ、ドロップダウンで適切な CPU アーキテクチャを設定します。

Inspector ウィンドウの、ネイティブ (C++) プラグインのインポート設定
Inspector ウィンドウの、ネイティブ (C++) プラグインのインポート設定

C# スクリプトからネイティブプラグインのメソッドを呼び出すには、以下のコードを使用します。

[DllImport ("pluginName")]
private static extern float Foopluginmethod();

pluginName には、ファイル名のプレフィックス (‘lib’) または拡張子 (’.so’)を加えないでください。すべてのネイティブプラグインメソッドの呼び出しを追加の C# コードレイヤーでラップすることが推奨されます。このコードは Application.platform を確認し、アプリケーションが実際のデバイス上で実行されている場合にのみネイティブメソッドを呼び出します。エディターで実行しているときには、ダミー値が C# コードから返されます。プラットフォーム依存のコードのコンパイルを制御するには、プラットフォームの #define ディレクティブ を使用してください。

C/C++ ソースファイルをプラグインとして使用する場合は、プラグイン名として __Internal を使用する以外は同様に C# から呼び出します。以下はその例です。

[DllImport ("__Internal")]
private static extern float Foopluginmethod();

ネイティブ(C++)プラグインの参考例

この zip ファイル にはネイティブコードプラグインの簡単な例が含まれています。 この例では、Unity アプリケーションからどのように C++ コードが呼び出されるかが確認できます。パッケージには、ネイティブプラグインが計算した 2 つの値の合計が表示されるシーンが含まれています。このプラグインをコンパイルするには Android NDK が必要です。



  • 2018–03–10 限られた 編集レビュー でパブリッシュされたページ

  • 5.5 のアップデート機能

  • 2018.2 にプラグインとして Android に追加された C++ ソースファイルと静的ライブラリの使用をサポート NewIn20182

UnityPlayerActivity Java コードの拡張
Using Java or Kotlin source files as plug-ins