Unity は、C、C++、Objective-C などで書かれたネイティブコードのライブラリであるネイティブの プラグイン を幅広くサポートしています。プラグインにより、Javascript や C# で書かれたゲームコードがこれらのライブラリから関数を呼び出すことができます。この機能により、Unity はミドルウェアライブラリや既存の C/C++ ゲームコードと統合することができます。
ネイティブのプラグインを使用するためには、最初に、必要な機能にアクセスし、それらをライブラリにコンパイルするために、C 言語の関数を作成する必要があります。Unity では、ネイティブライブラリの関数を呼び出す C# スクリプトも作成する必要があります。
ネイティブのプラグインは、C# スクリプトが他のユーザースクリプトにアクセスする簡単な C インターフェースを提供します。また、 ある低レベルのレンダリングイベントが発生したとき (例えば、グラフィックススデバイスが作成されたときなど) に、ネイティブプラグインによってエクスポートされた関数を呼び出すことも可能です。詳しくは、低レベルのネイティブプラグインインターフェース を参照してください。
以下のような 1 つの機能を持つ非常に簡単なネイティブライブラリのソースコードの例があるとします。
float FooPluginFunction () { return 5.0F; }
Unity 内からこのコードにアクセスするには、次のようなコードを使用できます。
using UnityEngine;
using System.Runtime.InteropServices;
class SomeScript : MonoBehaviour {
#if UNITY_IPHONE
// iOS では、プラグインは静的に実行ファイルに
// リンクしているので、ライブラリ名として __Internal を
// 使用しなければなりません。
[DllImport ("__Internal")]
#else
// 他のプラットフォームでは、プラグインを動的に読み込んで
// いるので、プラグインの名前を動的ライブラリに渡します。
[DllImport ("PluginName")]
#endif
private static extern float FooPluginFunction ();
void Awake () {
// プラグイン内部で FooPluginFunction を呼び出します。
// 5 をコンソールに表示します。
print (FooPluginFunction ());
}
}
Javascript を使用する場合、以下の構文を使用する必要があることに注意してください。ここで、DLLName は作成したプラグインの名前で、静的にリンクされたネイティブコードを作成する場合は “__Internal” です。
@DllImport (DLLName)
static private function FooPluginFunction () : float {};
一般的に、プラグインは、ターゲットプラットフォームのネイティブコードのコンパイラーでビルドされます。プラグイン関数は C 言語の呼び出しインタフェースを使用するため、C++ や Objective-C を使用するときには、名前修飾の問題を避ける必要があります。