Unity has extensive support for native plug-ins, which are libraries of native code written in C, C++, Objective-C, etc. Plug-ins allow your game code (written in Javascript or C#) to call functions from these libraries. This feature allows Unity to integrate with middleware libraries or existing C/C++ game code.
In order to use a native plug-in you firstly need to write functions in a C-based language to access whatever features you need and compile them into a library. In Unity, you will also need to create a C# script which calls functions in the native library.
The native plug-in should provide a simple C interface which the C# script then exposes to other user scripts. It is also possible for Unity to call functions exported by the native plug-in when certain low-level rendering events happen (for example, when a graphics device is created), see the Native plug-in interface page for details.
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 ());
}
}
Note that when using Javascript you will need to use the following syntax, where DLLName is the name of the plug-in you have written, or “__Internal” if you are writing statically linked native code:
@DllImport (DLLName)
static private function FooPluginFunction () : float {};
In general, plug-ins are built with native code compilers on the target platform. Since plug-in functions use a C-based call interface, you must avoid name mangling issues when using C++ or Objective-C.