Version: 2017.4
Inspector de Plugins
Plugins Nativos

Managed Plugins

Usualmente, los scripts se mantienen en un proyecto como los archivos fuente y son compilados por Unity cuando la fuente cambia. Sin embargo, también es posible compilar un script a una dynamically linked library** (DLL) utilizando un compilador externo. El DLL resultante puede luego ser agregado al proyecto y las clases que contiene pueden ser adjuntadas a los objetos como los scripts normales.

Por lo general es más fácil trabajar con scripts que DLLs en Unity. No obstante, usted podría tener acceso a código Mono de terceros que es suministrado en forma de un DLL. Cuando desarrolle su propio código, usted podría utilizar compiladores no soportados por Unity (F#, por ejemplo) al compilar el código a un DLL y agregándolo a su proyecto de Unity. También, usted podría querer suministrar código de Unity sin la fuente (para un producto de la Asset Store, digamos) y un DLL es una manera fácil de hacer esto.

Creando un DLL

Para crear un DLL, usted primero necesitaría un compilador adecuado. No todos los compiladores que producen código .NET son garantizados a que funcionen con Unity, por lo que puede ser sabio probar el compilador con algo de código disponible antes de hacer trabajo significante con este. si el DLL contiene ningún código que depende en el API de Unity, entonces usted podría simplemente compilarlo a un DLL utilizando las opciones apropiadas de compilación. Si usted no quiere utilizar el API de Unity entonces usted necesitará que los DLLs propios de Unity estén disponibles al compilador. En Mac, estos están contenido en el bundle de aplicación (usted puede ver la estructura interna del bundle al utilizar el comando Show Package Contents del menú contextual; haga click derecho o ctrl- click en la aplicación de Unity):-

La ruta a los DLLs de Unity típicamente serán

/Applications/Unity/Unity.app/Contents/Frameworks/Managed/

… y los dos DLLs son llamados UnityEngine.dll y UnityEditor.dll.

En Windows, los DLLs pueden encontrarse en las carpetas que acompaña la aplicación de Unity. La ruta típicamente será

C:\Program Files\Unity\Editor\Data\Managed

… mientras los nombres de los DLLs son los mismos para Mac OS.

Las opciones exactas para compilar el DLL van a variar dependiendo en el compilador utilizado. Como ejemplo, la linea de comando para el compilador Mono C#, mcs, podría verse algo así en Mac OS:-

mcs -r:/Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll -target:library ClassesForDLL.cs

Aquí, la opción -r especifica una ruta a la librería en ser incluida en la construcción, en este caso, la librería UnityEngine. La opción -target especifica qué tipo de construcción es requerida; la palabra “library” (librería) es utilizada para seleccionar una construcción DLL. Finalmente el nombre del archivo fuente en compilar es ClassesForDLL.cs (se asume que este archivo está en la carpeta actual de trabajo, pero usted podría especificar el archivo utilizando una ruta completa si es necesario). Asumiendo que todo va bien, el archivo DLL resultante va a aparecer cortamente en la misma carpeta que el archivo fuente.

Usando la DLL

Una vez compilado, el archivo DLL puede ser simplemente arrastrado al proyecto de Unity como cualquier otro asset. El asset DLL tiene un triangulo que se dobla que puede ser utilizado para revelar las clases separadas dentro de la librería. Las clases que deriven de MonoBehaviour pueden ser arrastradas a los Game Objects como cualquier script ordinario. Las clases No-MonoBehaviour pueden ser utilizadas directamente desde otro scripts de una manera usual.

Un DLL doblado con las clases visibles
Un DLL doblado con las clases visibles

Guía paso a paso para MonoDevelop y Visual Studio

Esta sección explica cómo construir e integrar un ejemplo DLL simple con MonoDevelop y Visual Studio y también cómo preparar una sesión de depuración para el DLL.

Configurando el proyecto

Primero, abra MonoDevelop o Visual Studio y cree un nuevo proyecto. En MonoDevelop, usted puede hacer esto al seleccionar File > New > Solution y luego escoger C# > Library. En Visual Studio, usted debería seleccionar File > New > Project y luego escoger Visual C# > Class Library.

Usted luego necesita llenar la información para la nueva librería:

  • Name es el namespace (para este ejemplo utilice “DLLTest” como el nombre).
  • Location es la carpeta padre del proyecto.
  • Solution name es la carpeta del proyecto.

Luego, usted debería agregar referencias a los DLLs de Unity. En Monodevelop, usted debería abrir el menú contextual para References en el explorador de Solution y luego escoger Edit References. Después, escoja la opción .Net Assembly tab > File System > select file. En Visual Studio, abra el menú contextual para References en el explorador Solution y escoja Add Reference. Luego, escoja la opción Browse > Browse > select file.

At this stage, you will have the option to select the required DLL file. On Mac OS X, the file path is:

    Applications/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll

…mientras en Windows, la ruta es

    Program Files\Unity\Editor\Data\Managed\UnityEngine.dll

Código

Para este ejemplo, re-nombre la clase a “MyUtilities” en el explorador Solution y remplace su código con el siguiente:

using System;   
using UnityEngine;

namespace DLLTest {

    public class MyUtilities {
    
        public int c;

        public void AddValues(int a, int b) {
            c = a + b;  
        }
    
        public static int GenerateRandom(int min, int max) {
            System.Random rand = new System.Random();
            return rand.Next(min, max);
        }
    }
}

Con este código en su lugar, construya el proyecto para generar el archivo DLL con sus símbolos de depuración.

Usando la DLL en Unity

Para este ejemplo, cree un nuevo proyecto en Unity y copie el archivo construido `project folder/bin/Debug/DLLTest.dll a la carpeta Assets. Luego, cree un script C# llamado “Test” en los Assets, y remplace su contenido con el siguiente código:

using UnityEngine;
using System.Collections;
using DLLTest;

public class Test : MonoBehaviour {

     void Start () {
        MyUtilities utils = new MyUtilities();
        utils.AddValues(2, 3);
        print("2 + 3 = " + utils.c);
     }
    
     void Update () {
        print(MyUtilities.GenerateRandom(0, 100));
     }
}

Cuando usted adjunte este script a un objeto en la escena y presione Play, usted verá el output del código del DLL en la ventana de la Consola.

Preparando una sesión de depuración para la DLL

Primero, usted debe preparar los símbolos de depuración para el DLL. En MonoDevelop, copie el archivo construido project folder/bin/Debug/DLLTest.dll.mdb a la carpeta Assets/Plugins. En Visual Studio, ejecute.

Program Files\Unity\Editor\Data\Mono\lib\mono\2.0\pdb2mdb.exe

en el command prompt pasar <project folder>\bin\Debug\DLLTest.pdb como parámetro. Luego, copiar el archivo convertido <project folder>\bin\Debug\DLLTest.dll.mdb a Assets/Plugins.

Después, abra el script “Test” en MonoDevelop. Asegúrese de que el depurador de Unity esté activado del menú Tools (Windows) o el menú MonoDevelop-Unity (MacOS). La opción que usted necesita de este menú es Add-in Manager > Installed tab > Unity > seleccione Mono Soft Debugger Support de Unity > Enable.

Con esta configuración completada, usted puede depurar el código que utiliza DLL en Unity en la manera usual. Ver la sección Scripting Tools para más información acerca de la depuración.

Inspector de Plugins
Plugins Nativos