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 アーキテクチャを設定します。
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();
AndroidNativePlugin.unitypackage zip ファイルには、Unity パッケージとして配布されるネイティブコードプラグインの簡単な例が含まれています。
このサンプルは、Unity アプリケーションから C++ コードを呼び出す方法を示しています。パッケージには、ネイティブプラグインによって計算された 2 つの値の合計を表示するシーンが含まれます。プラグインをコンパイルするには Android NDK をインストールする必要があります。
以下の手順でサンプルをインストールします。