Version: 2020.1
言語: 日本語
IL2CPP によるマネージスタックトレース
低レベルネイティブプラグインインターフェース

デスクトップ向けのプラグインのビルド

デスクトッププラットフォーム用のプラグインは、C、C++、Objective C で書かれたネイティブコードのライブラリです。ここでは、Windows、macOS、Linux のためのプラグインを説明します。詳細については、ネイティブプラグイン に関するドキュメントを参照してください。

Plugin Inspector
Plugin Inspector

macOS プラグイン

macOS プラグインはバンドルとして展開することができますが、IL2CPP を使用する場合には、C++ ファイルを展開して、[DllImport(“__Internal”)] 構文を呼び出すことができます。展開した C++ プラグインの詳細については、macOS Player - IL2CPP用の C++ ソースコードプラグイン のドキュメントを参照してください。

XCode でバンドルプロジェクトを作成するには、XCode 11 を開き、File > New > Project を選択し、macOS > Framework & Library > Bundle に移動します。XCode を使う作業についての詳細は、Apple の XCode に関するドキュメントを参照してください。

プラグインは、64 ビットアーキテクチャを含むユニバーサルバイナリとしてビルドする必要があります。または、dylib ファイルを個別に用意することもできます。 C++ (.cpp) または Objective-C (.mm) を使用してプラグインを実装する場合は、名前マングリングの問題を避けるために、関数を C リンケージで宣言する必要があります。

extern "C"
{
  float FooPluginFunction ();
}

Windows プラグイン

Windows のプラグインは、エクスポートされた関数を持つ .dll ファイル、または、IL2CPP を使用している場合は、展開した C++ファイルです。.dll ファイルを作成できる大抵の言語や開発環境は、プラグインの作成に使用できます。 C リンケージを持つ C++ 関数を宣言して、名前マングリングの問題を避ける必要があります。

Linux プラグイン

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

Unity 内のプラグインの管理

Unity では、 Plugin Inspector がプラグインを管理します。Plugin Inspector にアクセスするには、Project ウィンドウでプラグインファイルを選択します。スタンドアロンプラットフォームの場合は、ライブラリが対応している CPU アーキテクチャを選択します。クロスプラットフォームのプラグインの場合は、.bundle ファイル(macOS の場合)、.dll ファイル (Windows の場合)、.so ファイル (Linux の場合) を含む必要があります。Unity は、ターゲットプラットフォームに適したプラグインを自動的に選択し、プレイヤーに加えます。詳細については、Plugin Inspector を参照してください。

C# のプラグインを使う

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

ノート: PluginName がライブラリのプレフィックスもファイル拡張子も含まないように注意してください。例えば、プラグインファイルの実際の名前は PluginName.dll (Windows) や libPluginName.so (Linux) にします。

プラグインの例

プロジェクト 説明 リンク
最もシンプルなプラグインの例 このプロジェクトでは、数字の表示、文字列の表示、2 つの float の加算、2 つの int の加算などの基本的な操作を実装します。 Unity の GitHub リポジトリへのリンクから、Simplest Plugin Example をダウンロードしてください。このプロジェクトには、Windows、macOS、Linux のプロジェクトファイルが含まれています。
Native Renderer Plugin これは、低レベルのレンダリングプラグインの例です。このプロジェクトでは、以下のことを実演します。
- 通常のレンダリングがすべて完了した後、C++ コードから回転する三角形を描画します。
- Texture.GetNativeTexturePtr を使って C++ コードにアクセスすることで、C++ コードからプロシージャルなテクスチャを埋めます。
Unity の GitHub リポジトリへのリンクから、Native Renderer Plugin をダウンロードしてください。このプロジェクトには、Windows、UWP、macOS、WebGL、Android のファイルが含まれています。
IL2CPP によるマネージスタックトレース
低レベルネイティブプラグインインターフェース