UnityはC,C++,Objective-C等で記述されたライブラリを Plugins でサポートしています。プラグインはゲームのコード(JavaScriptやC#,Booで記述されている)からライブラリの関数を呼び出すことができます。この機能はUnityをミドルウェアライブラリや既存のC/C++コードと統合することができます。
注意: デスクトッププラットフォームでは,プラグインはPro専用の機能です。またセキュリティ的な理由によりプラグインはWebplayerでは利用できません。
プラグインを使うためには,以下の2つの作業を行う必要があります。
プラグインは単純なC言語で書かれたインターフェースをC#や他のスクリプトに提示します。さらに,Unityでは特定の低レベルのレンダリングイベントが発生した時(例えばグラフィックデバイスを生成した時)にエクスポートした関数を呼び出すことも可能です。詳細は ネイティブ プラグイン インタフェース ページを確認してください。
非常にシンプルな例:
float FooPluginFunction () { return 5.0F; }
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を使用しているときDLLの名前(DLLName)がpluginである場合,あるいは “__Internal” で静的にリンクしたネイティブコードを書いている場合は,次の構文を書く必要がある事に注意してください。
@DllImport (DLLName)
static private function FooPluginFunction () : float {};
一般的には,プラグインは,ターゲットプラットフォーム上でネイティブコードコンパイラを使って構築されています。プラグインの関数はC言語に基づいたコール·インタフェース(C-based call interface)を使用するので,C++やObjective-Cを使用した場合はネーム・マングル(name mangling)の問題を避けなければなりません。
詳細と例については,次のページを参照してください:-