デスクトッププラットフォーム用のプラグインは、C、C++、Objective C で書かれたネイティブコードのライブラリです。ここでは、macOS、Windows、Linux のためのプラグインを説明します。詳細については、ネイティブプラグイン に関するドキュメントを参照してください。
macOS プラグインはバンドルとして展開することができますが、IL2CPP スクリプティングバックエンド (ルーズ C++ ファイル) を使用する場合は、[DllImport("__Internal")]
構文で呼び出すことができます。緩い C++ プラグインの詳細については、macOS Player - IL2CPP のための C++ ソースコードプラグイン のドキュメントを参照してください。
Xcode でバンドルプロジェクトを作成するには、以下を行います。
Xcode での作業の詳細については、Apple の Xcodeに関するドキュメント を参照してください。
.cpp
) または Objective-C (.mm
) を使用してプラグインを実装する場合、名前マングリングを避けるために C リンケージで関数を宣言してください。extern "C"
{
float ExamplePluginFunction ();
}
Windows のプラグインは、エクスポートされた関数を持つ .dll
ファイル、または、IL2CPP を使用している場合は、ルーズ C++ ファイルです。.dll
ファイルを作成できる大抵の言語や開発環境でプラグインを作成できます。名前マングリングの問題を避けるには、C リンケージを持つ C++ 関数を宣言する必要があります。
Linux 上のプラグインは、エクスポートされた関数をもつ .so
ファイルです。これらのライブラリは、通常 C または C++ で書かれていますが、どの言語でも使用できます。他のプラットフォームと同様に、名前マングリングの問題を避けるために、C リンケージを持つ C++ 関数を宣言する必要があります。
Linux用ネイティブプラグインをビルドする際、ビルドされたライブラリが他のネイティブプラグインに依存関係がある場合、コンパイル時にそのライブラリの rpath
を指定する必要があります。
リンカーフラグ -Wl, -rpath=$ORIGIN
を加えて、実行時の検索パスを指定します。このリンカーフラグは、システムの検索パスを検索する以外に、ライブラリの現在のディレクトリで依存関係を検索するようにローダーに指示します。他のリンカーフラグを -Wl, -rpath=$ORIGIN
と一緒に加えることもできますが、Unity はそれらを制御しません。例えば、/usr/bin/g++ -o binary.c.o -Wl,-rpath=$ORIGIN
のように使用します。
あるいは、LD_LIBRARY_PATH=dependency wo path
を環境に設定することで、ローダーにそのパスで依存関係を検索するように指示することもできます。Linux では、現在のディレクトリから依存関係を自動的に検索することはありません。誤ったパスは、Unity エディターでライブラリが見つからないエラーを引き起こすため、依存関係の正しい検索パスを設定するようにしてください。
Unity では、Plugin Inspector がプラグインを管理します。Plugin Inspector にアクセスするには、Project ウィンドウ でプラグインファイルを選択します。スタンドアロンプラットフォームの場合は、ライブラリが対応している CPU アーキテクチャを選択します。クロスプラットフォームのプラグインの場合は、.bundle
ファイル(macOS の場合)、.dll
ファイル (Windows の場合)、.so
ファイル (Linux の場合) を含む必要があります。Unity は、ターゲットプラットフォームに適したプラグインを自動的に選択し、プレイヤーに加えます。詳細については、Plugin Inspector を参照してください。
ビルドしたプラグインを Assets フォルダーまたは Unity プロジェクトの適切なアーキテクチャ固有のサブディレクトリに配置します。C# スクリプトから呼び出すと、Unity は名前でそれを見つけます。例: [DllImport ("PluginName")] private static extern float ExamplePluginFunction ();
ノート: PluginName
がライブラリのプレフィックスやファイル拡張子を含まないように注意してください。例えば、プラグインファイルの実際の名前は、PluginName.dll (Windows の場合) や libPluginName.so (Linux の場合) にします。
これらのプロジェクトをダウンロードして使用することで、Unity でのプラグイン実装の方法を学ぶことができます。