このページはデスクトッププラットフォーム (Windows/MacOS X/Linux) 向けの ネイティブコードプラグイン について説明します。
MacOSX では プラグイン はバンドルとしてデプロイされます。バンドルプロジェクト (Bundle Project )は Xcode の File->NewProject… を選択し、Bundle -> Carbon/Cocoa Loadable Bundle ( XCode 3 の場合)または OS X -> Framework & Library -> Bundle (Xcode 4 の場合)を選択してください。
もし C++( .cpp )もしくは Objective-C ( .mm )でプラグインを実装する場合、関数が Name Mangling の問題 を避けるため、C のリンクで宣言されていることを確認する必要があります。
extern "C" {
float FooPluginFunction ();
}
Windows 用のプラグインはエクスポートされた関数を持つ DLL ファイルです。これは実質的に、どのような言語・開発環境でも作成できます。 Mac OSX と同様、Name Mangling の問題を回避するためには、任意の C++関数は C のリンクを宣言する必要があります。
Linux のプラグインは、エクスポートされた関数を持つ .so
ファイルです。これらのライブラリも例によって C または C++で記述され、任意の言語で使用することができます。
また他のプラットフォームと同様に、任意の C++関数は C リンケージを宣言する必要があります。
32ビット 用や 64ビット 用プラグインを必要とする問題は、プラットフォームにより異なる形でハンドリングされています。
Windows や Linux では、プラグインは手動で管理する(すなわち、64ビット プレイヤーをビルドする前に Assets/Plugins
フォルダーに 64ビット ライブラリをコピーする必要があり、32ビット 用プレイヤーをビルドする前に、32ビット ライブラリを Assets/Plugins
フォルダーにコピーする必要があります)、または 32ビット 用のプラグインを Assets/Plugins/x86
に配置して、64ビット 用のプラグインを Assets/Plugins/x86_64
に配置できます。デフォルトではエディターはアーキテクチャ特有のサブディレクトリを先に見て、もしディレクトリが存在しない場合、プラグインをルートの Assets/Plugins
フォルダーから代わりにコピーします。
ユニバーサル Linux ビルドについては、アーキテクチャ特有のサブディレクトリを使用する必要があることに注意してください(ユニバーサル Linux ビルドをビルドするとき、エディターはルートの) Assets/Plugins
からプラグインを一切コピーしません。
Mac OS X については、プラグインを 32ビット、64ビット 両方のアーキテクチャを保有するユニバーサルバイナリとしてビルドすべきです。
一度ビルドしたバンドルは Unity プロジェクトの Assets->Plugins フォルダー (または、適当なアーキテクチャ特有のサブディレクトリ) に配置する必要があります。Unity は C# スクリプトに関数を定義したときの名前で探します。
[DllImport ("PluginName")]
private static extern float FooPluginFunction ();
なお、PluginName がライブラリのプレフィックス( prefix )やファイル拡張子を含める必要はないことに注意してください。例えば、プラグインファイルの実際の名前は、Windows の場合は PluginName.dll、Linux の場合は libPluginName.so です。 プラグインでコードを変えるときは、あなたがプロジェクトでスクリプトを再コンパイルする必要があることに注意してください。でなければ、プラグインには最新のコンパイルされたコードは存在しません。
クロスプラットフォームなプラグインは、Plugins フォルダーに .bundle ( Mac 用)、.dll ( windows 用)、.so ( Linux 用)のファイルを含めなければなりません。 それ以上の作業はありません。Unity は自動的にターゲットプラットフォームのためのプラグインを抽出し、プレイヤーに含めます。
このプラグインプロジェクトはいくつかの非常に単純な機能を提供します(数字のプリント、文章のプリント、小数の足し算、整数の足し算)。 このプロジェクトは ここ で見つけることができます。また、このプロジェクトには Windows 用、Mac 用、Linux 用のプロジェクトが含まれています。
マルチスレッドレンダリングプラグインのマルチプラットフォーム動作例は、低レベルネイティブプラグインインターフェース ページで見つけることができます。