Extending the UnityPlayerActivity Java Code
Android の ネイティブ (C++) プラグイン

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();

Native (C++) プラグインサンプル

AndroidNativePlugin.unitypackage zip ファイルには、Unity パッケージとして配布されるネイティブコードプラグインの簡単な例が含まれています。

このサンプルは、Unity アプリケーションから C++ コードを呼び出す方法を示しています。パッケージには、ネイティブプラグインによって計算された 2 つの値の合計を表示するシーンが含まれます。プラグインをコンパイルするには Android NDK をインストールする必要があります。

以下の手順でサンプルをインストールします。

  1. zip ファイルをダウンロードします。
  2. AndroidNativePlugin.unitypackage ファイルを解凍します。
  3. Unity エディターを開きます。
  4. 新しいプロジェクトを作成します。
  5. 新しいプロジェクトで Assets > Import Package > Custom Package の順に選択します。
  6. Import Package ファイルダイアログで、ファイルを解凍した場所に移動してファイルを選択します。

  • 2018–12–21 Page amended
  • 2018–03–10 Page published
  • 5.5 のアップデート機能
  • 2018.2 にプラグインとして Android に追加された C++ ソースファイルと静的ライブラリの使用をサポート NewIn20182
Extending the UnityPlayerActivity Java Code
Android の ネイティブ (C++) プラグイン