デスクトッププラットフォーム用のプラグインは、C、C++、Objective C で書くことができるネイティブコードのライブラリです。ここでは、macOS、Windows、Linux のためのプラグインを説明します。詳細については、ネイティブプラグイン を参照してください。
macOS プラグインはバンドルとして展開することができますが、IL2CPP スクリプティングバックエンド (緩い C++ ファイル) を使用する場合は、[DllImport("__Internal")] 構文で呼び出すことができます。緩い C++ プラグインの詳細については、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 path を設定して、そのパスで依存関係を検索するようにローダーに指示することもできます。Linux は、依存関係を現在のディレクトリで自動的に検索しません。誤ったパスは Unity エディターでライブラリが見つからないエラーの原因となるため、依存関係の検索パスを正しく設定してください。
Unity では、Plugin Inspector がプラグインを管理します。Plugin Inspector にアクセスするには、Project ウィンドウ でプラグインファイルを選択します。スタンドアロンプラットフォームの場合は、ライブラリと互換性のある CPU アーキテクチャを選択します。クロスプラットフォームのプラグインの場合は、.bundle ファイル (macOS の場合)、.dll ファイル (Windows の場合)、.so ファイル (Linux の場合) を加える必要があります。Unity は、ターゲットプラットフォームに適したプラグインを自動的に選択し、プレイヤーに加えます。詳細については、プラグインのインポートと設定 を参照してください。
ビルドしたプラグインは、Unity プロジェクトの Assets フォルダーまたは、アーキテクチャ特有の適切なサブディレクトリに配置する必要があります。C# スクリプトから呼び出すと、Unity は名前でそれを見つけます。例えば、[DllImport ("PluginName")] private static extern float ExamplePluginFunction ();。
ノート: PluginName 値に、ライブラリプレフィックスまたはファイル拡張子を含めないでください。例えば、プラグインファイルの実際の名前が Windows では PluginName.dll、Linux では libPluginName の場合、値はどちらも PluginName にする必要があります。
これらのプロジェクトをダウンロードして使用することで、Unity でのプラグイン実装の方法を学ぶことができます。