Unity has extensive support for native Plugins, which are libraries of native code written in C, C++, Objective-C, etc. Plugins 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.
Note: For security reasons, plugins are not usable in web player.
In order to use a native plugin 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 plugin 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 plugin when certain low-level rendering events happen (for example, when a graphics device is created), see the Native Plugin Interface page for details.
A very simple native library with a single function might have source code that looks like this:
float FooPluginFunction () { return 5.0F; }
To access this code from within Unity, you could use code like the following:
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 - это имя плагина, который вы написали, или “__Internal”, если вы пишете статически подключенный нативный код:
@DllImport (DLLName)
static private function FooPluginFunction () : float {};
В основном, плагины собираются нативными компиляторами на целевой платформе. Так как функции плагинов используют интерфейс вызовов, основанный на C, вы должны избегать проблем с искажением имён при использовании C++ или Objective-C.