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.
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/
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
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
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.
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.
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
y luego escoger Visual C# > Class Library.Usted luego necesita llenar la información para la nueva librería:
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.
En este punto, usted tendrá la opción de seleccionar el archivo DLL requerido. En Mac OSX, el archivo puede encontrarse en
Applications/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll
Program Files\Unity\Editor\Data\Managed\UnityEngine.dll
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.
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.
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
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. … y los dos DLLs son llamados UnityEngine.dll y UnityEditor.dll. … mientras los nombres de los DLLs son los mismos para Mac OS. 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. …mientras en Windows, la ruta es
en la linea de comandos, pasar project folder\bin\Debug\DLLTest.pdb
como un parámetro. Luego, copie el archivo convertido project folder\bin\Debug\DLLTest.dll.mdb
a Assets/Plugins.