Version: 2020.3
言語: 日本語
UnityPlayerActivity Java コードの拡張
Java や Kotlin のソースファイルをプラグインとして使用

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

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

スクリプティングのバックエンドの互換性

次の表は、どの スクリプトバックエンド が様々なタイプのネイティブプラグインをサポートしているかを示しています。

スクリプティングバックエンド 共有ライブラリ 静的ライブラリ C/C++ のソースファイル
IL2CPP
Mono なし なし

ネイティブプラグインの構築と利用

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

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

extern "C" {
  float Foopluginmethod ();
}

ライブラリをビルドしたら、 出力の .so ファイルを Unity プロジェクトにコピーします。インスペクターで、.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 修正されたページ
  • 2018–03–10 公開ページ
  • 5.5 のアップデート機能
  • 2018.2 にプラグインとして Android に追加された C++ ソースファイルと静的ライブラリの使用をサポート NewIn20182
UnityPlayerActivity Java コードの拡張
Java や Kotlin のソースファイルをプラグインとして使用