Introduction to native plug-in API
Locate the native plug-in API files and import them into your native plug-in.
Read time 2 minutesLast updated 12 days ago
In addition to the public C# APIs for writing managed code, Unity provides a smaller native interface, which you can use to access Unity Editor and Engine functionality from your native plug-ins.
Plugin API folder
The native interfaces are a set of C or C++ compatible header (.h) files incuded as part of an Editor installation. The files are in the folder, which you can find in the following locations:
PluginAPI- Windows:
<UnityInstallPath>\Editor\Data\PluginAPI - macOS: Right-click on the Unity application, and select Show Package Contents. The headers are in
Contents\PluginAPI
Each header file contains additional documentation as code comments within it. For more information on getting started with implementing the native interfaces, refer to the code comments in the main header file .
IUnityInterface.hInterface compatibility
All Unity native plug-in API header files are compatible with plug-ins written in C++, but only some are compatible with plug-ins written in C.
Files that aren't C-compatible report the error if you attempt to compile them as C. You'll also find the corresponding check in the header file source:
"This file cannot be compiled in a C environment"#ifndef __cplusplus#error "This file cannot be compiled in a C environment"#endif
Interface registry
To handle main Unity events, a plug-in must export and functions. enables the plug-in to access these functions, which you can find in in the plug-in API.
UnityPluginLoadUnityPluginUnloadIUnityInterfacesIUnityInterface.hThe following example uses to load the interface into a pointer. This is a standard method you can repeat to load other interfaces from the native plug-in API:
IUnityInterfacesIUnityGraphics#include "IUnityInterface.h"#include "IUnityGraphics.h"// Unity plugin load eventextern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API UnityPluginLoad(IUnityInterfaces* unityInterfaces){ IUnityGraphics* graphics = unityInterfaces->Get<IUnityGraphics>();}