Unity 6.3
0 онлайн 78 гостей 3 в системе
Вход
Программирование в Unity Шаг 114 из 210

Введение в нативный плагин API

Помимо открытых API C# для написания управляемого кода, Unity предоставляет небольшой нативный интерфейс, через который из нативных плагинов можно обращаться к возможностям Unity Editor и движка.

Папка плагина API

Нативные интерфейсы представляют собой набор C или C++ совместимый заголовок (.h) файлы, входящие в состав установки редактора. Файлы находятся в папке PluginAPI папку, которую вы можете найти в следующих местах:

  • Windows: <UnityInstallPath>\Editor\Data\PluginAPI
  • macOS: Щелкните правой кнопкой мыши приложение Unity и выберите Показать содержимое пакета. Заголовки находятся в Contents\PluginAPI

Каждый файл заголовка содержит дополнительную документацию в виде комментариев к коду. Дополнительные сведения о начале реализации собственных интерфейсов см. в комментариях к коду в главном файле заголовка IUnityInterface.h.

Совместимость интерфейса

Все Unity нативный плагин API заголовочные файлы совместимы с плагинами, написанными в C++, но только некоторые из них совместимы с плагинами, написанными в C.

Файлы, не совместимые с C, сообщают об ошибке "This file cannot be compiled in a C environment", если вы пытаетесь компилировать их как C.. Вы также найдете соответствующую проверку в исходном файле заголовка:

#ifndef __cplusplus
#error "This file cannot be compiled in a C environment"
#endif

Реестр интерфейса

Для обработки главного Unity событий, плагин должен экспортировать UnityPluginLoad и UnityPluginUnload функции. IUnityInterfaces позволяет плагину получить доступ к этим функциям, которые вы можете найти в IUnityInterface.h в плагине API.

В следующем примере используется IUnityInterfaces для загрузки IUnityGraphics интерфейс в указатель. Это стандартный способ, который можно повторять для загрузки других интерфейсов из API нативных плагинов:

#include "IUnityInterface.h"
#include "IUnityGraphics.h"
// Unity plugin load event
extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API
    UnityPluginLoad(IUnityInterfaces* unityInterfaces)
{
    IUnityGraphics* graphics = unityInterfaces->Get<IUnityGraphics>();
}

Дополнительные ресурсы