Plugins - Pro only feature
Unity Manual > Advanced > Plugins - Pro only feature

Plugins - Pro only feature

У Unity есть расширяемая поддержка плагинов, основанных на C, C++ и Objective-C. Плагины работают только в автономных (standalone) приложениях. Для веб-плеера они отключены из соображений безопасности.

Для использования плагинов необходимо сделать следующее:
* Написать плагин на языке семейства C и скомпилировать его.
* Создать скрипт C#, в котором будет вызываться функция из плагина.

So the plugin provides a simple C interface. Скрипт вызывает функции, заложенные в плагине..

Вот очень простой пример:

The C file of a minimal plugin:

float FooPluginFunction () { return 5.0F; }

A C# script that uses the plugin:

using UnityEngine;
using System.Runtime.InteropServices;

class SomeScript : MonoBehaviour
{
   // This tells unity to look up the function FooPluginFunction inside the plugin named "PluginName"
   [DllImport ("PluginName")]
   private static extern float FooPluginFunction ();

   void Awake ()
   {
      // Calls the FooPluginFunction inside the PluginName plugin
      // And prints 5 to the console
      print (FooPluginFunction ());
   }
} 

Building a plugin for Mac OS X

Если вы собираете плагин для Mac OS X, вы должны создать bundle. Самый просто способ — использование XCode. Используйте File>NewProject... и выберите Bundle - Carbon Bundle preset.

If you are using C++ or Objective-C to implement the plugin you have to make sure the functions are declared with C linkage to avoid name mangling issues.

extern "C"
{
  float FooPluginFunction ();
} 

Building a plugin for Windows

Плагины для Windows — это DLL-файлы с экспортируемыми функциями. Фактически, для создания плагина может использоваться любой языке или среда разработки, способная создавать DLL-файлы. Again, if you use C++, declare functions with C linkage to avoid name mangling issues.

Using your plugin from C#

Когда создатите bundle, скопируйте его в папку Assets>Plugins. Unity will then find it by its name when you define a function like this:

[DllImport ("PluginName")]
private static extern float FooPluginFunction (); 

Запомните, что "PluginName" не должен включать расширение файла.

Deployment

Для кроссплатформенных плагинов в папку Plugins должны быть включены и .bundle и .dll файлы. После размещения плагинов в папке Plugins больше ничего делать не надо. Unity автоматически определит правильный плагин для правильной платформы и включит его в сборку.

Examples

Midi Plugin

Полный пример плагина интерфейса здесь.

This is a complete MidiPlugin for OS X which uses Apple's CoreMidi API. It provides a simple C API and a C# class using the C API. The C# class contains a high level API, with easy access to NoteOn and NoteOff events and their velocity.

Texture Plugin

An example how to assign image data to a texture from C++ directly to OpenGL (note that is will only work when Unity is using OpenGL renderer). This example includes both XCode (for Mac) and Visual Studio (for Windows) project files. The plugin with accompanying Unity project can be found here.

More information

Mono Interop with native libraries.

P-invoke documentation on MSDN.