Unity は C++や C 言語で書かれたネイティブコードのライブラリをネイティブ プラグイン として幅広くサポートしています。プラグインはこれらのライブラリからあなたのゲームコード(JavaScript や C#で書かれた)の関数を呼び出すことを許可します。この機能によって Unity とミドルウェアライブラリや既存の C/ C++ゲームコードとを統合することができます。
注意: セキュリティ上の理由から、プラグインは、Web プレーヤーで使用できません。
ネイティブプラグインを使用するには、まず C ベースの言語の関数を記述する必要があり、必要な機能にアクセスし、ライブラリでそれらをコンパイルします。Unity では、C#スクリプトを作成する必要があり、ネイティブプラグイン内の関数を呼び出す事も必要です。
ネイティブプラグインは、C#のスクリプトから他のユーザスクリプトに公開してシンプルな C のインターフェースを提供する必要があります。Unity は一定のローレベル レンダリング イベントが発生したときに関数を呼び出す事が可能です。(例えば、グラフィック デバイスが作成された時)、詳細に関しては低レベルネイティブプラグインインターフェースを参照してください。
1つの機能で非常に簡単なネイティブライブラリのソースコードがあるとします。例えばこのように:
float FooPluginFunction () { return 5.0F; }
Unity 内からこのコードにアクセスするには、次のようなコードを使用することができます。
using UnityEngine;
using System.Runtime.InteropServices;
class SomeScript : MonoBehaviour {
#if UNITY_IPHONE || UNITY_XBOX360
// On iOS and Xbox 360 plugins are statically linked into
// the executable, so we have to use __Internal as the
// library name.
[DllImport ("__Internal")]
#else
// Other platforms load plugins dynamically, so pass the name
// of the plugin's dynamic library.
[DllImport ("PluginName")]
#endif
private static extern float FooPluginFunction ();
void Awake () {
// Calls the FooPluginFunction inside the plugin
// And prints 5 to the console
print (FooPluginFunction ());
}
}
Javascript を使用しているとき、次の構文を使用する必要がある事に注意してください。この構文では、DLLName はあなたの書いた plugin の名前、あるいは、静的にリンクしたネイティブコードを書いている場合は “__Internal” です。
@DllImport (DLLName)
static private function FooPluginFunction () : float {};
一般的には、プラグインは、ターゲットプラットフォーム上でネイティブコードコンパイラを使って構築されています。プラグインの関数は C 言語に基づいたコール·インタフェース(C-based call interface)を使用するので、C++や Objective-C を使用した場合はネーム・マングル(name mangling)の問題を避けなければなりません。