Version: 2017.3
Native Plugins
Low-level Native Plugin Interface

Сборка плагинов для настольных платформ

На этой странице описан нативный код плагинов для настольных платформ (Windows/Mac OS X/Linux). Обратите внимание, что плагины намеренно отключены в web-плеере по соображениям безопасности.

Сборка плагина для Mac OS X

На Mac OSX плагины будут развернуты в виде бандлов. Вы можете создать проект бандла в XCode, выбрав File->NewProject…, а затем выбрав Bundle -> Carbon/Cocoa Loadable Bundle (в XCode 3) или OS X -> Framework & Library -> Bundle (в XCode 4)

Если вы используете плагин, реализованный на C++ (.cpp) или Objective-C (.mm), то вы должны убедиться, что функции объявлены с C-связями, чтобы избежать проблем с коверканьем имён.

extern "C" {
  float FooPluginFunction ();
}

Сборка плагина для Windows

Plugins on Windows are DLL files with exported functions. Practically any language or development environment that can create DLL files can be used to create plugins. As with Mac OSX, you should declare any C++ functions with C linkage to avoid name mangling issues.

Сборка плагина для Linux

Plugins on Linux are .so files with exported functions. These libraries are typically written in C or C++, but any language can be used. As with the other platforms, you should declare any C++ functions with C linkage in order to avoid name mangling issues.

32-битные и 64-битные библиотеки

Вопрос о необходимости 32-битных и/или 64-битных плагинах рассматривается отдельно в зависимости от платформы.

Windows и Linux

В Windows и Linux, плагинами можно управлять вручную (например, прежде чем собрать 64-битную игру, копируйте 64-битную библиотеку в папку Assets/Plugins, а, прежде чем собрать 32-битную игру, копируйте 32-битную библиотеку в папку Assets/Plugins) ИЛИ вы можете разместить 32-битную версию плагина в Assets/Plugins/x86, а 64-битную версию плагина в Assets/Plugins/x86_64. По умолчанию редактор сначала будет искать в подпапках конкретной архитектуры и, если этот каталог не существует, он будет копировать плагины из папки Assets/Plugins.

Обратите внимание, что для сборки Universal Linux, вы обязаны использовать подпапки конкретной архитектур (при сборке Universal Linux, редактор не будет копировать все плагины из папки Assets/Plugins).

Mac OS X

Для Mac OS X, вы должны собрать свой плагин в качестве универсального бинарного файла, который содержит как 32-битную, так и 64-битную архитектуры.

Использование ваших плагинов в C#

После сборки, бандл должен быть помещен в папку Assets->Plugins (или соответствующую конкретной архитектуре подпапку) в проекте Unity. Unity будет искать его по имени, когда вы определяете функцию в скрипте С#:-

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

Please note that PluginName should not include the library prefix nor file extension. For example, the actual name of the plugin file would be PluginName.dll on Windows and libPluginName.so on Linux. Be aware that whenever you change code in the Plugin you will need to recompile scripts in your project or else the plugin will not have the latest compiled code.

Развертывание

For cross platform plugins you must include the .bundle (for Mac), .dll (for Windows), and .so (for Linux) files in the Plugins folder. No further work is then required on your side - Unity automatically picks the right plugin for the target platform and includes it with the player.

Примеры

Простейший плагин

This plugin project implements only some very basic operations (print a number, print a string, add two floats, add two integers). This example may be helpful if this is your first Unity plugin. The project can be found here and includes Windows, Mac, and Linux project files.

Рендеринг из кода C++

Пример мультиплатформенного плагина, который работает с многопоточным рендерингом в Unity можно найти на странице Native Plugin Interface.

Native Plugins
Low-level Native Plugin Interface