Version: 2018.4
ネイティブプラグイン
低レベルネイティブプラグインインターフェース

デスクトッププラットフォーム用プラグインのビルド

ここでは、デスクトッププラットフォーム (Windows/Mac OS X/Linux) 用の ネイティブコードのプラグイン について説明します。

Mac OS X 用プラグインのビルド

Mac OSX では、プラグイン はバンドルとして展開されます。XCode を使ってバンドルプロジェクトを作成するには、File->NewProject… と移動し、Bundle -> Carbon/Cocoa Loadable Bundle (XCode 3 の場合)、または OS X -> Framework & Library -> Bundle (XCode 4 の場合) を選択します。

C++ (.cpp) か Objective-C++ (.mm) を使用してプラグインを実装する場合、名前マングリング の問題を避けるために、関数を C リンケージで宣言する必要があります。

extern "C" {
  float FooPluginFunction ();
}

Windows 用プラグインのビルド

Windows のプラグインは、エクスポートされた関数を持つ DLL ファイルです。DLL ファイルを作成できる実際の言語や開発環境であればすべて、プラグインの作成に使用できます。 Mac OSX と同様に、C リンケージを持つ C++ 関数を宣言して、名前マングリングの問題を避ける必要があります。 

Linux 用プラグインのビルド

Linux のプラグインは、エクスポートされた関数を持つ .so ファイルです。これらのライブラリは、通常 C または C++ で書かれていますが、どの言語でも使用できます。 他のプラットフォームと同様に、名前マングリングの問題を避けるために、C リンケージを持つ C++ 関数を宣言する必要があります。 

32 ビット と 64 ビットのライブラリ

32 ビットや 64 ビットのプラグインを必要とする問題は、プラットフォームによって異なる方法で処理されます。

Windows と Linux

Windows と Linux では、プラグインは手動で管理することができます (例えば、64 ビットプレイヤーをビルドする前に、64 ビットライブラリを Assets/Plugins フォルダーにコピーし、32 ビットプレイヤーをビルドする前には、32 ビットライブラリを Assets/Plugins フォルダーにコピーします)。または、32 ビットバージョンのプラグインを Assets/Plugins/x86 に、64 ビットバージョンのプラグインを Assets/Plugins/x86_64 フォルダーに置きます。デフォルトでは、エディターはアーキテクチャ特有のサブディレクトリを最初に探します。そのディレクトリが存在しない場合は、ルートの Assets/Plugins フォルダーからプラグインをコピーします。

ユニバーサル Linux ビルドでは、アーキテクチャ特有のサブディレクトリを使用する必要があることに注意してください (ユニバーサル Linux ビルドを作成するとき、エディターはルートの Assets/Plugins フォルダーからプラグインをコピーしません)。

Mac OS X

Mac OS X の場合、32 ビットと 64 ビットの両方のアーキテクチャを持つユニバーサルバイナリとしてプラグインをビルドする必要があります。

C# のプラグインを使用

いったんビルドすると、バンドルは Unity プロジェクトの Assets->Plugins フォルダー (または、適当なアーキテクチャ特有のサブディレクトリ) に配置する必要があります。すると、Unity は以下の例のように、関数を定義したときの名前で探します。

[DllImport ("PluginName")]
private static extern float FooPluginFunction ();

PluginName にはライブラリのプレフィックスもファイル拡張子も含まないように注意してください。例えば、プラグインファイルの実際の名前は PluginName.dll (Windows) や libPluginName.so (Linux) となります。 プラグインのコードを変更する場合は、プロジェクト内のスクリプトを再コンパイルする必要があります。そうしないと、プラグインは最新のコンパイルされたコードを取得できません。

展開

クロスプラットフォームのプラグインの場合は、.bundle (Mac)、.dll (Windows)、.so (Linux) ファイルを Plugins フォルダーに含める必要があります。 他の作業は必要ありません。Unity はターゲットプラットフォームに適切なプラグインを自動的に選択し、プレイヤーに加えます。

簡単なプラグイン

このプラグインプロジェクトは、非常に基本的な操作のみを実装します (数字の出力、文字列の出力、2 つの浮動小数点数の加算、2 つの整数の加算)。この例は、初めて Unity プラグインを作成するユーザーにとって参考になるかもしれません。 プロジェクトは ここ (Zip形式) からダウンロードでき、Windows、Mac、Linux のプロジェクトファイルが含まれています。

C++ のコードからレンダリング

Unity のマルチスレッドレンダリングで動作するマルチプラットフォームプラグインの例は、低レベルのネイティブプラグインインターフェース を参照してください。

ネイティブプラグイン
低レベルネイティブプラグインインターフェース