Version: 2018.1
Plugins Nativos
Low-level Native Plugin Interface

Construyendo Plugins para Plataformas de Escritorio

Esta página describe los Plugins de Código Nativo para las plataformas de escritorio (Windows/Mac OS X/Linux). Tenga en cuenta que los plugins están intencionalmente desactivados en los reproductores web por razones de seguridad.

Construyendo un Plugin para Mac OS X

En Mac OSX, los plugins son implementados como bundles. Usted puede crear un proyecto bundle con XCode al seleccionar File->NewProject… y luego seleccionar Bundle -> Carbon/Cocoa Loadable Bundle (en XCode 3) o OS X -> Framework & Library -> Bundle (en XCode 4)

Si usted está utilizando C++ (.cpp) u Objective-C (.mm) para implementar el plugin entonces usted necesita asegurar que las funciones estén declaradas con un vinculo en C para evitar name mangling issues.

extern "C" {
  float FooPluginFunction ();
}

Construyendo un Plugin para windows

Los PLugins en Windows son archivos DLL con funciones exportadas. Prácticamente cualquier lenguaje o ambiente de desarrollo que puede crear archivos DLL pueden ser utilizados para crear plugins. Como en Mac OSX, usted debería declarar cualquier función C++ con un vinculo a C para evitar name mangling issues.

Construyendo un Plugin para Linux

Los Plugins en Linux son archivos .so con funciones exportadas. Estas librerías son típicamente escritas en C o C++, pero cualquier lenguaje puede ser utilizado. Como con otras plataformas, usted debería declarar cualquier función en C++ con un vínculo a C con el fin de evitar name mangling issues.

Librerías de 32 y 64 bits

El problema de necesitar plugins de 32-bit y/o 64-bit se maneja diferente dependiendo en la plataforma.

Windows y Linux

En windows y Linux, los plugins pueden ser manejados manualmente (e.g, antes de construir un reproductor 64-bit, copie la librería de 64-bit a la carpeta Assets/Plugins, y antes de construir un reproductor 32-bit, copie la librería 32-bit a la carpeta Assets/Plugins) o usted puede colocar una versión 32-bit del plugin en la versión Assets/Plugins/x86 y de 64-bit del plugin en Assets/Plugins/x86_64. Por defecto, el editor va a mirar en el sub-directorio architecture-specific primero, y si ese directorio no existe, va a copiar los plugins de la carpeta raíz Assets/Plugins mas bien.

Tenga en cuenta que para la construcción Universal Linux, a usted se le requiere utilizar los sub-directorios architecture-specific (cuando construya una construcción Universal Linux, el Editor no va a copiar cualquier plugins de la carpeta raíz Assets/Plugins).

Mac OS X

Para Mac OS X, usted debería construir su plugin como binario universal que contiene ambas las arquitecturas 32-bit y 64-bit.

Utilizando su plugin de C#

Una vez construido, el bundle debería ser colocado en la carpeta Assets->Plugins (o el sub-directorio apropiado de architecture-specific) en el proyecto de Unity. Unity va a luego lo va a encontrar por nombre cuando usted defina una función como esta en script C# :-

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

Por favor tenga en cuenta que el PluginName no debería incluir el prefijo de la librería o la extensión del archivo. Por ejemplo, el nombre actual del archivo plugin sería PluginName.dll en Windows y libPluginName.so en Linux. Por favor tenga en cuenta que cuando usted cambia el código en el Plugin usted va necesitar re-compilar las scripts en su proyecto, o de lo contrario el plugin no tendrá el último código compilado.

Implementación

Para plugins multiplataformas, usted debe incluir los archivos .bundle (para Mac), .dll (para Windows), y .so (para Lixun) en la carpeta Plugins. No se requiere más trabajo por su lado - Unity automáticamente coge el plugin correcto para la plataforma destino y la incluye con el reproductor.

Ejemplos

Plugins Más Simple

Este proyecto plugin implementa solo algunas operaciones básicas (imprima un número, imprima un string, agregue dos floats, agregue dos int). Este ejemplo puede ayudarlo si este es su primer plugin en Unity. El proyecto se puede encontrar aquí e incluye los archivos de proyecto de Windows, Mac, y Linux

Renderizando desde código C++

Un plugin ejemplo multi-plataforma que funciona con un renderizado multitheaded (multi-hilo) puede encontrarse en la página de Native Plugin Interface.

Plugins Nativos
Low-level Native Plugin Interface