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.
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 ();
}
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.
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.
El problema de necesitar plugins de 32-bit y/o 64-bit se maneja diferente dependiendo en la plataforma.
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
).
Para Mac OS X, usted debería construir su plugin como binario universal que contiene ambas las arquitecturas 32-bit y 64-bit.
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.
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.
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
Un plugin ejemplo multi-plataforma que funciona con un renderizado multitheaded (multi-hilo) puede encontrarse en la página de Native Plugin Interface.