Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo escribir un complemento nativo para Unity

Cómo escribir un complemento nativo para Unity

Unity puede importar código escrito (y compilado) en otros idiomas, llamados complementos nativos. Hoy compartiremos cómo crear un complemento nativo de Unity.

Complementos administrados y no administrados en Unity

La conexión de código dispar no es la primera vez para Unity. Si es usuario de Windows, probablemente haya oído hablar de las DLL (abreviatura de bibliotecas de enlaces dinámicos). Son similares a las aplicaciones independientes en que son software compilado. La diferencia es que no se pueden ejecutar directamente ya que están diseñados específicamente para ser utilizados por otras aplicaciones.

Unity admite dos tipos de complementos: administrados y no administrados. El primero es un lenguaje de código de bytes escrito en C# y compilado en lenguaje intermedio común (CIL). Los complementos alojados son tan potentes como los scripts de C# y vienen con código fuente compilado. Los complementos no administrados (o nativos) son software escrito en otro lenguaje (generalmente C). Tienen pocas limitaciones en cuanto a funcionalidad y, a menudo, son más rápidos que los scripts tradicionales porque están compilados en código de máquina.

Paso 1: Crear un nuevo proyecto C

En este ejemplo, estoy usando Visual Studio 2015; puedes usar cualquier IDE de tu elección para compilar el código C. Comience creando una biblioteca C no administrada, también conocida como nuevo proyecto. Abra Visual Studio, haga clic en Archivo | Nuevo proyecto y seleccione Visual C | Aplicación de consola Win32.

Después de nombrar el proyecto (TestDLL en este ejemplo), asegúrese de que el tipo de aplicación esté configurado en DLL. En Opciones adicionales, seleccione Proyecto vacío.

En este punto, la solución Visual C está lista y podemos empezar a escribir código.

Paso 2: escribir la biblioteca

El código C generalmente se divide en dos archivos. Definición de función (archivo de encabezado) e implementación de función (archivo de implementación). El archivo de implementación es un archivo .cpp ubicado en el directorio ResourceFiles y el archivo de encabezado es un archivo .h con el mismo nombre ubicado en el directorio HeaderFiles. En este ejemplo, creamos un archivo de encabezado y un archivo de implementación. El archivo de implementación contendrá todas las funciones que se guardarán en la DLL. Puede crear un nuevo archivo haciendo clic derecho en la carpeta y seleccionando Agregar>Nuevo elemento.

Parte de ejecución: TestDLLSort.cpp

Comience a codificar para implementar la clasificación de matrices.

[AppleScript]Vista de texto sin formato ¿Copiar código?

010203040506070809101112 #include "TestDLLSort.h" #include "TestDLLSort.h".#include lt; algoritmo externo "C" { void TestSort(int a[], int length) { std::sort (a, a length); } }.}

Las líneas 5-7 usan la función de clasificación de matrices std:sort en la biblioteca de algoritmos. Sólo se ha agregado el bloque externo "C", que debe usarse para exportar la referencia a TestSort a la DLL.

Archivo de encabezado: TestDLLSort.h

Las definiciones en el archivo de implementación deben ser exactamente las mismas que las del archivo de encabezado. Debe contener el prototipo TestSort y la firma de la función.

[AppleScript]Vista de texto sin formato ¿Copiar código?

123456 #define TESTDLLSORT_API __declspec(dllexport) extern "C" { TESTDLLSORT_API void TestSort(int a[], int length }

La parte restante es el código para crear el DLL TESTDLLSORT_API, que puede tener un nombre arbitrario, se utiliza para marcar todas las funciones exportadas. En software más complejo, TESTDDLLSORT_API debe vincularse a __declspec(dllimport) según sea necesario. Pero en este caso no es necesario.

Paso 3: Compilar

El último paso es compilar nuestra DLL en Visual Studio, asegurándonos de que la plataforma de distribución esté configurada correctamente (32 bits o 64 bits).

En la consola en la parte inferior de la pantalla, verá el siguiente registro de salida:

[AppleScript] ¿Código de copia de vista de texto sin formato?

0102030405060708091011121314 1gt ; -- ---- Reconstrucción todo iniciado: Proyecto: TestDLL, Configuración: Versión x64 ------ 1gt TestDLLSort.cpp 1gt Creando biblioteca C:\Users\Alan Zucconi\Documents\Visual Studio 2015\Projects\; TestDLL\x64 \Release\TestDLL.lib y objeto C:\Users\Alan Zucconi\Documents\Visual Studio 2015\Projects\TestDLL\x64\Release\TestDLL.exp 1gt Código generado 1gt; IPDB/IOBJ se encuentra disponible en la compilación. 1gt; Código generado completo 1gt; TestDLL.vcxproj -gt; C:\Users\Alan Zucconi\ Documents\Visual Studio 2015\Projects\TestDLL\x64\Release\TestDLL.dll ========== Reconstruir todo : 1 exitoso, 0 fallido, 0 omitido ==========

Si ve la siguiente advertencia: advertencia C4273: enlace dll inconsistente, esto puede indicar que el compilador no está seguro de usar __declspec(dllimport ) o __declspec(dllexport). Utilice este último si desea crear un complemento nativo para Unity.