Creación de scripts en Unity para programadores expertos
Para los programadores que utilizan Unity por primera vez
En Unity, puedes utilizar scripts para desarrollar prácticamente cualquier parte de un juego u otro contenido interactivo en tiempo real. Unity es compatible con la creación de scripts en C#y existen dos opciones principales para estructurar tus scripts de C# en Unity: el diseño orientado a los objetos, que es el enfoque tradicional y más comúnmente utilizado, y el diseño orientado a los datos, que ahora es posible en Unity, para los casos de uso específicos, por medio de nuestra nueva pila de tecnología basada en datos (DOTS) multiproceso de alto rendimiento.
Unity es compatible con C#, un lenguaje estándar del sector que tiene algunas similitudes con Java o C++
C# es más fácil de aprender que C++. Además, es un "lenguaje administrado", lo que significa que administra la memoria automáticamente por ti: asigna y cancela la asignación de memoria, cubre las fugas de memoria, etc.
En general, es preferible utilizar C# en lugar de C++ si quieres crear un juego primero y lidiar con los aspectos más avanzados de la programación después.
Toda la jugabilidad y la interactividad desarrolladas en Unity se construyen sobre tres bloques de construcción fundamentales: GameObjects, componentes y variables.
Cualquier objeto que forma parte de un juego es un GameObject. Esto incluye a los personajes, luces, efectos especiales, accesorios y todo lo demás.
Componentes
Los GameObjects no pueden hacer nada por sí mismos. Para que se conviertan en algo real, debes asignar propiedades a un GameObject, y esto se hace al agregar componentes.
Los componentes tienen cualquier cantidad de propiedades editables, o variables, que se pueden modificar en la ventana del Inspector del Unity Editoro por medio de un script. En el ejemplo anterior, algunas propiedades de la luz son el rango, el color y la intensidad.
Los componentes integrados de Unity son muy versátiles, pero pronto te darás cuenta de que debes ir más allá de lo que pueden ofrecerte para implementar tu propia lógica. Para hacer esto, deberás utilizar scripts para implementar tu propia lógica y tu propio comportamiento en el juego, y después agregar esos scripts como componentes a los GameObjects. Cada script crea su conexión con los procesos internos de Unity al implementar una clase que se deriva de la clase integrada, llamada MonoBehaviour.
Tus componentes de scripts te permitirán hacer muchas cosas: activar eventos del juego, buscar colisiones, aplicar física, responder a las entradas de los usuarios y mucho más. Para obtener más información, consulta la API de creación de scripts de Unity.
El concepto tradicional de GameObject-componente aún funciona bien porque es fácil de entender para los programadores y para quienes no tienen experiencia de programación, además de que es fácil crear interfaces de usuario intuitivas para este concepto. Si agregas un componente Rigidbody a un GameObject, este comenzará a caer; o, si agregas un componente de luz a un GameObject, este comenzará a emitir luz. Y así sucesivamente.
Sin embargo, el sistema de componentes se escribió en un marco de trabajo orientado a los objetos y genera ciertos desafíos para los desarrolladores en cuanto a la administración de la memoria y la caché en el hardware que evoluciona constantemente.
Los componentes y los GameObjects son objetos "con una gran cantidad de C++". Todos los GameObjects tienen un nombre. Sus componentes son envoltorios de C# colocados sobre componentes de C++. Esto hace que sean fáciles de utilizar, pero puede afectar al rendimiento, pues pueden terminar almacenados de una manera no estructurada. Ese objeto de C# puede estar en cualquier parte de la memoria. El objeto de C++ también puede estar en cualquier parte de la memoria. Los elementos no se agrupan en bloques contiguos de la memoria. Cada vez que se carga un elemento en el CPU para su procesamiento, todos los elementos que lo componen se deben obtener desde ubicaciones diferentes. Esto se puede convertir en un proceso lento e ineficaz y, por lo tanto, puede requerir muchas soluciones alternativas de optimización.
- C# Job System para ejecutar código multiproceso de forma eficiente.
- El sistema de componentes de entidad (ECS) para escribir código de alto rendimiento de forma predeterminada.
- El compilador Burst para producir código nativo altamente optimizado.
En DOTS, el ECS es el nuevo sistema de componentes. En este nuevo sistema, podrás utilizar una entidad para hacer cualquier cosa que se hace normalmente con un GameObject en el método tradicional orientado a los objetos. Los componentes se siguen llamando de la misma manera. La diferencia más importante es el formato de los datos. Puedes leer más sobre esto en la publicación del blog “En PUNTOS: Sistema de componentes de entidad”.
Además de que es un mejor enfoque para la programación de juegos por razones relacionadas con el diseño, el uso de ECS te pone en una posición ideal para aprovechar C# Job System y el compilador Burst de Unity, lo que te permite aprovechar al máximo las capacidades del hardware moderno.
Los sistemas multiproceso de DOTS te permiten crear juegos que se pueden ejecutar en una gran variedad de hardware y desarrollar mundos de juego más completos, con más elementos y simulaciones más complejas. Por su parte, el código de alto rendimiento contribuye para obtener el mejor control de temperatura y aumentar la vida útil de la batería en los dispositivos móviles de los jugadores. Al hacer la transición del diseño orientado a los objetos al diseño orientado a los datos, puedes reutilizar tu código, y otras personas pueden entenderlo y trabajar en él, con mayor facilidad.
Debido a que algunas partes de la tecnología de DOTS están en la versión de vista previa, se recomienda que los desarrolladores la utilicen para resolver un desafío de rendimiento específico en sus proyectos, en lugar de utilizarla para crear proyectos completos. Consulte la sección "Más recursos" en la parte inferior de esta página, donde encontrarás los enlaces para los recursos clave sobre DOTS.
Las modificaciones y la depuración son eficientes en Unity porque los desarrolladores pueden ver todas las variables mientras juegan, lo que les permite cambiar cualquier cosa sobre la marcha y sin escribir ni una sola línea de código. Puedes pausar el juego en cualquier momento o revisar el código un enunciado a la vez.
Estos son algunos recursos fabulosos para obtener más información sobre la optimización en Unity:
Comprender la optimización en Unity
.NETO: .NET: Unity utilizó una implementación del tiempo de ejecución estándar Mono para la creación de scripts que es compatible con C# de forma nativa. Unity actualmente incluye Visual Studio para Mac en lugar de MonoDevelop-Unity en macOS. En Windows, Unity incluye Visual Studio.
El tiempo de ejecución para la creación de scripts .NET 4.6 de Unity es compatible con muchas de las nuevas características emocionantes de C# y con las funciones de depuración disponibles en C# 6.0 y versiones posteriores. Esto también ofrece una excelente experiencia de IDE en C# para acompañar a las nuevas características de C#.
IL2CPP: IL2CPP: este es un backend de creación de scripts desarrollado por Unity, y lo puedes utilizar como alternativa de Mono al crear proyectos para algunas plataformas. Si eliges crear un proyecto con IL2CPP, Unity convierte el código IL de los scripts y los ensamblados en código de C++, y después crea un archivo binario nativo (por ejemplo, .exe, .apk o .xap) para la plataforma que elijas.
Ten en cuenta que IL2CPP es el único backend de creación de scripts disponible al crear proyectos para iOS y WebGL.