¿Qué estás buscando?

Actualización del libro electrónico: Más patrones de diseño y principios SOLID

THOMAS KROGH-JACOBSEN / UNITY TECHNOLOGIESProduct Marketing Core Tech
Jul 23, 2024|10 minutos
Libro electrónico actualizado Mejora tu programación con patrones de programación de juegos
Para tu comodidad, tradujimos esta página mediante traducción automática. No podemos garantizar la precisión ni la confiabilidad del contenido traducido. Si tienes alguna duda sobre la precisión del contenido traducido, consulta la versión oficial en inglés de la página web.

En otoño de 2022 lanzamos el libro electrónico Mejora tu código con patrones de programación de juegosjunto con un repositorio de GitHub con ejemplos de código. También hemos publicado una serie de tutoriales en vídeo de cinco partes para acompañar el libro electrónico y el proyecto de muestra.

Hemos recibido excelentes comentarios sobre estos recursos, y muchos de ustedes nos han pedido que incluyamos más patrones de diseño. Gracias por compartir su opinión. Mi equipo y yo seguimos de cerca sus comentarios y se lo agradecemos mucho.

Hoy me complace anunciar que ya está disponible una edición actualizada del libro electrónico, Level up your code with design patterns and SOLID, con una versión actualizada del proyecto de ejemplo de patrones de diseño, que puedes descargar de la Unity Asset Store.

Tanto el libro electrónico como el proyecto de ejemplo se basan ahora en Unity 6 e incluyen más ejemplos y patrones. El proyecto de muestra también incluye más funciones de UI Toolkit, incluido un ejemplo que demuestra el enlace a bases de datos, una petición popular de la comunidad.

Nota: Unity 6 estará disponible a finales de este año. Si quieres seguir los ejemplos de la guía y el proyecto de demostración que la acompaña, asegúrate de descargar Unity 6 Preview.

Cómo los patrones de diseño y los principios SOLID pueden beneficiar a los proyectos Unity
Esta ilustración del libro electrónico explica cómo aplicar el principio de segregación de interfaces de SOLID para dividir una interfaz en otras más pequeñas.
Esta ilustración del libro electrónico explica cómo aplicar el principio de segregación de interfaces de SOLID para dividir una interfaz en otras más pequeñas.

Antes de sumergirnos en los nuevos contenidos del libro electrónico, algunos de ustedes que están menos familiarizados con los conceptos podrían preguntarse: ¿Por qué debería aprender sobre patrones de diseño y cómo encajan en el desarrollo de juegos Unity?

Volviendo a su comentario, aunque los fundamentos de la programación orientada a objetos son familiares para muchos, aplicar estos principios en su propio código a veces puede parecer abstracto y demasiado académico.

Piénsalo así: Por cada problema de diseño de software al que se enfrente, innumerables desarrolladores se han enfrentado a retos similares antes que usted. Aunque no siempre puedes pedirles consejo directamente, puedes aprender de sus soluciones a través de patrones de diseño.

Los patrones de diseño ofrecen soluciones generales a problemas comunes en ingeniería de software. No son plantillas listas para copiar y pegar en el código, sino herramientas a las que recurrir cuando sea necesario. Algunos patrones son más intuitivos que otros, pero cada uno puede ser útil en cada contexto.

Hemos creado esta guía para quienes no conocen los patrones de diseño o simplemente necesitan un repaso. Esboza escenarios comunes en el desarrollo de juegos en los que pueden aplicarse estos patrones. Si estás pasando de otro lenguaje orientado a objetos como Java o C++ a C#, encontrarás ejemplos prácticos de cómo adaptar estos patrones específicamente para Unity.

En el fondo, los patrones de diseño son simplemente ideas. No se aplicarán a todas las situaciones, pero si se utilizan correctamente, pueden ayudarle a crear aplicaciones escalables. Integrarlos en sus proyectos mejorará la legibilidad y el mantenimiento del código. A medida que se familiarice con estos patrones, identificará oportunidades para agilizar su proceso de desarrollo.

En resumen, nuestra guía está diseñada para elevar tus habilidades de codificación y crear mejores proyectos de Unity y establecer una comprensión de las mejores prácticas generales de la industria que puedes llevar contigo a lo largo de tu carrera.

Descargar el libro electrónico actualizado
¿Qué contiene el libro electrónico y el proyecto actualizados?
La demo de responsabilidad única separa al Jugador en componentes más pequeños.
La demo de responsabilidad única separa al Jugador en componentes más pequeños.

Veamos las principales novedades de los recursos de patrones de diseño:

Una sección ampliada sobre cómo aplicar los principios SOLID

Cada uno de los cinco principios básicos de SOLID cuenta ahora con ejemplos prácticos de código implementados en el proyecto de ejemplo que se explica en el libro electrónico. A modo de recordatorio, SOLID es un acrónimo mnemotécnico de cinco fundamentos básicos del diseño de software: considérelos cinco reglas básicas a tener en cuenta que pueden ayudarle a mantener diseños orientados a objetos comprensibles, flexibles y mantenibles.

A modo de recordatorio, las siglas SOLID significan:

  • Principio de responsabilidad única: Una clase sólo debe tener una razón para cambiar, lo que significa que sólo debe tener un trabajo o responsabilidad.
  • Principio abierto-cerrado: Las clases deben estar abiertas a la ampliación pero cerradas a la modificación, lo que permite ampliarlas sin cambiar el código existente.
  • Principio de sustitución de Liskov: Los objetos de una superclase deben poder sustituirse por objetos de sus subclases sin que ello afecte a la corrección del programa.
  • Principio de segregación de interfaces: No se debe obligar a los clientes a depender de interfaces que no utilizan. Promueve la creación de interfaces específicas frente a una única interfaz de uso general.
  • Principio de inversión de la dependencia: Los módulos de alto nivel no deben depender de los de bajo nivel, sino que ambos deben depender de abstracciones.
 Cada principio SOLID tiene su propia escena de demostración en la muestra, donde la teoría se plasma en un ejemplo concreto aplicable a casos de uso habituales en los juegos.
Cada principio SOLID tiene su propia escena de demostración en la muestra, donde la teoría se plasma en un ejemplo concreto aplicable a casos de uso habituales en los juegos.

La clave de los ejemplos es que seguir estos principios puede ayudarte a conseguir los siguientes beneficios en el desarrollo de tus juegos:

  • Legibilidad: Un código claro y bien organizado facilita la comprensión eficaz de la funcionalidad del proyecto. Adherirse a los principios SOLID puede mejorar la legibilidad del código; cuando los estándares del código son coherentes, aumentan las posibilidades de una colaboración fluida entre los programadores de juegos de un equipo.
  • Escalabilidad: La aplicación de los principios SOLID fomenta el mantenimiento del código, lo que es crucial para los proyectos que se quieren ampliar. Siguiendo estos principios, es menos probable que los cambios realizados en una parte del código introduzcan problemas inesperados en otra. Este planteamiento garantiza que el código siga siendo flexible y adaptable a la evolución de las necesidades.
  • Velocidad: En última instancia, los principios SOLID contribuyen a mejorar los flujos de trabajo en el desarrollo de juegos. El código modular, un aspecto clave en el que hace hincapié SOLID, consiste en dividir los sistemas en componentes más pequeños y manejables. Este enfoque modular facilita las pruebas, la depuración y la reutilización del código en todos los proyectos, lo que reduce el tiempo de desarrollo y aumenta la productividad.
En el libro electrónico y en la muestra se exploran ahora un total de 11 patrones
Un ejemplo de uso conjunto de la vinculación de datos y el patrón Modelo-Vista-Vista-Modelo para las lecturas de la barra de salud
Un ejemplo de uso conjunto de la vinculación de datos y el patrón Modelo-Vista-Vista-Modelo para las lecturas de la barra de salud

El libro electrónico y el proyecto actualizados incluyen cuatro nuevos patrones, con lo que el total asciende a 11. He aquí un breve resumen de cada uno de ellos:

  • Patrón de fábrica: Un caso de uso clásico es cuando tienes potenciadores (como aumentos de velocidad, escudos o vidas extra), que comparten varios atributos pero tienen funcionalidades diferentes. Aquí se puede utilizar el patrón de fábrica para crear instancias de estas diferentes clases de potenciadores derivadas de una interfaz o clase base común, lo que permite la adición flexible de nuevos potenciadores sin modificar el código cliente existente.
  • Puesta en común de objetos: Algunos se referirían a esto como una técnica de optimización del rendimiento más que como un patrón de diseño. En cualquier caso, piénsalo como una forma de mejorar el rendimiento reutilizando objetos en lugar de crearlos y destruirlos con frecuencia. En nuestra escena de muestra encontrarás un ejemplo de una torreta disparando grandes cantidades de balas a gran velocidad. En lugar de instanciarlos (y limpiarlos una vez que han cumplido su propósito con un coste de rendimiento significativo) cada vez, utilizamos el patrón para reciclarlos una y otra vez.
  • Singleton: El singleton es probablemente uno de los patrones más comunes en el desarrollo de juegos - lo más probable es que ya lo estés utilizando hoy. Es útil si necesitas tener un objeto que coordine acciones en toda la escena. Por ejemplo, puede que quieras un gestor de juego en tu escena para dirigir el bucle principal del juego. Sin embargo, hay algunas trampas a tener en cuenta cuando se utiliza el patrón singleton, que explicamos en la guía.
  • Patrón de mando: Es probable que hayas visto el patrón de comandos en funcionamiento si has jugado a algún juego que utilice la función deshacer/rehacer o que guarde tu historial de entradas en una lista. Es un patrón que se puede aprovechar para un juego de estrategia, por ejemplo, en el que el usuario puede planificar varios turnos antes de ejecutarlos realmente en el orden en que se le dio la entrada.
  • Patrón estatal: Esto permite que un objeto cambie su comportamiento cuando cambia su estado interno, lo que simplifica la gestión de comportamientos complejos dependientes del estado en personajes de juegos o elementos de interfaz de usuario. Piensa en un PNJ enemigo que tiene diferentes comportamientos, como "inactivo", "patrullando" o "atacando", que depende de diferentes escenarios de juego, como dónde se encuentra el jugador en el mapa.
  • Patrón de observador: Este patrón te ayuda a implementar un sistema de eventos eficiente donde los objetos pueden suscribirse, y reaccionar, a eventos dinámicamente. Un caso de uso es el de un jugador que recoge munición en un juego de acción que activa distintos eventos, como la reproducción de un sonido, la actualización de la interfaz de usuario y la reproducción de una animación.
  • Model View Presenter (MVP): En esencia, este patrón consiste en desacoplar la visualización del estado del estado real, permitiendo un diseño reactivo en el que las vistas se actualizan automáticamente en respuesta a los cambios del modelo, lo que lo convierte en un patrón común en la programación de interfaz de usuario. El modeloson los datos, la vistala interfaz de usuario y el presentadorun mediador que maneja la lógica de la vista y sincroniza los datos del modelo.
  • Modelo-Vista-Vista-Modelo (Nuevo): Como su nombre indica, está relacionado con el patrón MVP, pero lo amplía añadiendo la vinculación de datos en tiempo de ejecución, lo que simplifica la actualización de los elementos de la interfaz de usuario. En nuestro ejemplo aprovechamos la nueva función de vinculación de datos en UI Toolkit y Unity 6 Preview.
  • Patrón de estrategia (Nuevo): Este patrón define una familia de algoritmos encapsulando cada uno de ellos, para hacerlos intercambiables, permitiendo que el algoritmo varíe independientemente de los clientes que lo utilicen. Se trata de un patrón útil para implementar diferentes comportamientos de movimiento en la IA de los juegos, por ejemplo.
  • Patrón de peso mosca (Nuevo): Utilice este patrón para optimizar el uso de memoria compartiendo tantos datos como sea posible con objetos similares. La idea básica es que centralices los datos compartidos entre objetos.
  • Bandera sucia (Nuevo): Este patrón es útil para optimizar el rendimiento marcando los objetos como "sucios" cuando cambian, de forma que sólo se recalculan o actualizan cuando es necesario. Este patrón puede ayudarte a gestionar actualizaciones costosas en bucles de juego o en algunos casos de renderizado de UI.
Compartir datos entre objetos similares mediante el patrón flyweight
Comparte datos entre objetos similares utilizando el patrón flyweight.

El proyecto de ejemplo refleja el libro electrónico y muestra cada uno de los 11 patrones en acción. Puede descargar el proyecto en The Asset Store y seguir las escenas correspondientes para ver estos patrones aplicados en escenarios reales. Ten en cuenta que el proyecto requiere Unity 6 Preview o posterior.

Antes de lanzarse al proyecto, conviene tener en cuenta algunos consejos útiles.

Navegue por los menús hasta las muestras SOLID y de patrones de diseño.
Navegue por los menús hasta las muestras SOLID y de patrones de diseño.

Comience con la escena Bootstrap. Esta escena configura la demo y proporciona acceso al menú principal (puedes aprender más sobre el concepto de SceneBootStrapper en el e-book). Desde el menú principal, puede navegar hasta la muestra correspondiente. Cada escena muestra un principio o patrón de diseño SOLID diferente.

Explorar el proyecto de muestra
Explora el proyecto de muestra.

Tenga en cuenta que puede haber pequeñas diferencias entre el proyecto de muestra y los ejemplos de código de la guía. Para mejorar la claridad y la legibilidad, algunos ejemplos presentan código simplificado, como los campos públicos.

Es posible que su equipo prefiera un estilo de codificación distinto de las convenciones utilizadas en esta guía o en el proyecto de ejemplo. Recomendamos crear una guía de estilo de C# adaptada a sus necesidades específicas y seguirla de forma coherente en todo el equipo. Consulte nuestro libro electrónico sobre cómo crear su propia guía de estilo para obtener más información.

Descargar el proyecto de ejemplo actualizado

Considere los ejemplos proporcionados y determine qué patrón de diseño se ajusta mejor a las necesidades de su proyecto. A medida que se familiarice con estos patrones, descubrirá su potencial para agilizar y mejorar su flujo de trabajo de desarrollo.

Tanto el libro electrónico como el proyecto de muestra sobre el uso de patrones de diseño pueden descargarse gratuitamente:

Descargar el libro electrónico actualizado

¡Feliz codificación!