Skip to content

Escalabilidad a través de buenas prácticas en Unity

Probablemente uno de los primeros escollos con los que se encuentra un desarrollador cuando empieza a hacer juegos se da en el momento en que quiere hacer algo más grande que un Tetris (que también tiene su reto, ojo).  Es por ello, que es de gran importancia tener presente la Escalabilidad a través de buenas prácticas en Unity.

 

El progreso habitual en la disciplina del gamedev cuando se trata de programar videojuegos comienza con intentar comprender las matemáticas de vectores, los sistemas de inputs y en general los principales módulos que participan en un videojuego. Al principio uno no sabe qué es un rigidbody o un collider, algo que pasado un tiempo se termina comprendiendo como básico y esencial.

 

Una vez adquiridas las nociones básicas sobre C# y el motor Unity quizás nos apetezca ir un poco más allá. Así que nos ponemos manos a la obra, intentamos hacer un juego con un sistema de inventario o una serie de IAs para el juego y bueno… pronto empezamos a notar que nuestro proyecto es como el cuarto desordenado de nuestro primo pequeño y no sabemos muy bien cómo hemos llegado a ello. Estábamos escribiendo código, solucionando e implementando y en un momento dado vemos que todo está hecho un lío y hacer cualquier cambio es difícil.

 

Siendo por ello tan importante, el hecho de tener presente la escalabilidad a través de buenas prácticas en Unity.

 

 

Código final vs Arquitectura

 

Lo primero que debemos entender es que cuando empezamos a aprender a usar C# en Unity la mayoría de tutoriales, para hacer las cosas más sencillas, están bastante centrados en hacer código final. El código final es aquel que implementa algo tangible en nuestra aplicación. 

 

Lo primero que alguien podría pensar es que es perfectamente válido, ¿qué código vamos a hacer si no? Bien, hay una parte de verdad en ello: este código es necesario. Sin embargo, el problema nace en el momento en el que este código es la estructura de tu aplicación.

 

Lo mejor es verlo con un símil. Cuando vamos a construir una casa, si esta no es demasiado grande ni compleja, podemos simplemente contratar al constructor y manos a la obra. Tenemos un diseño y lo que hace falta es mano de obra y materiales: ladrillo aquí y allá, cemento, azulejos, ventanas… Los propios materiales finales son los que hacen la casa y los muros de carga son los que sujetan la casa.

 

No obstante, cuando queremos hacer algo más grande, esta estrategia ya no funciona: hace falta un arquitecto que realice los cálculos adecuados para crear una estructura: un esqueleto que soporte, por ejemplo, múltiples pisos, hacen falta vigas y otros elementos estructurales que si bien no son parte del “disfrute” del recinto, deben estar ahí para que el resto de elementos finales puedan existir en ese espacio.

 

Pues aquí pasa lo mismo. 

 

A continuación vamos a hablar de esas vigas y elementos estructurales que no son más que herramientas del lenguaje y estrategias de código que nos permiten crear un proyecto escalable y sobre todo, desacoplado.

 

En esta noticia sobre escalabilidad a través de buenas prácticas en Unity, mostraremos un código desacoplado, el cual es aquel en el que las dependencias entre objetos y clases es la más pequeña posible.

 

Listado de las principales estrategias de arquitectura de código

 

A continuación vamos a hacer un listado breve de estas herramientas del código. Ojo, toca que cada uno dedique su tiempo a poder explorarlas y queda fuera de este artículo el profundizar en cada una, ya que dan para un curso entero. Bueno, dicho esto, vamos al lío:

 

  • Aplica el principio DRY (Don’t Repeat Yourself) para evitar duplicar código. Tu herramienta principal aquí son la herencia (métodos virtuales mayormente).
  • Usa las interfaces (no interfaces de usuario, si no de código) y las clases abstractas para crear código desacoplado que sea fácilmente accesible. Las interfaces son contratos que deben cumplir las clases que implementan estas interfaces y permiten que otras clases las reconozcan por cumplir dicho contrato. Por ejemplo, si creamos la interfaz IWeapon, cualquier clase que use un IWeapon podrá usar cualquier objeto que implemente dicha interfaz, siendo esto mucho más potente que usar una clase directamente.
  • No abuses de los monobehaviour. Las clases que heredan de Monobehaviour son las únicas que pueden interactuar con la escena. No obstante, muchas veces esto no es necesario. Si tienes un sistema gestor de inventario, ¿necesita ser un monobehaviour? Posiblemente no. Lo que necesitará será una clase monobehaviour que le informe de los cambios que realiza el usuario. Una buena forma de verlo es pensar en monobehaviour como clases que comunican los cambios en el juego a otro grupo de clases que están por detrás. Una clase normal consume muchísimo menos que un monobehaviour.
  • Usa ScriptableObjects. Los ScriptableObjects son objetos mucho más sencillos que los Monobehaviours y son persistentes en sus estados, es decir, que los cambios que hagas se quedan “grabados” más allá de la escena, ya que no son gameobjects, si no assets. Existen algunas estrategias de desacoplamiento muy potentes usando los ScriptableObjects.
  • Aprende patrones de diseño. Si bien hay una lista enorme de ellos, unos cuantos si que son muy útiles. Pensemos en los patrones como fórmulas para resolver problemas concretos enfocadas a tener un código escalable y desacoplado.
  • Aprende a usar delegates. Un delegate es un tipo de variable que permite referenciar una función. Para verlo de manera sencilla, tenemos por un lado variables y por otro lado funciones. Con eso hacemos nuestro código. Pues bien, las variables almacenan y referencian datos: números, texto, etc… Pues con los delegates es igual pero con métodos. Los delegates son muy potentes para desacoplar código ya que puede separar al invocador del invocado, sin que se tengan que conocer, siendo el delegate el intermediario entre ambos.

 

Aunque hay muchos más consejos sobre Escalabilidad a través de buenas prácticas en Unity. Estos son algunos de los principales, que servirán sin duda como el siguiente paso en la carrera del programador de videojuegos. Esperamos que os haya servido esta guía y que estéis buscando más información sobre estas herramientas

 

¿Hablamos?

Estamos encantados de atenderte

Rellena este formulario y te respondemos en menos de 24 h.

Nuestro equipo estará encantado de asesorarte y buscar la formación que necesitas.

Acepto la Política de privacidad y los Términos de servicio.

Al enviarnos sus datos por medio de este formulario nos autoriza expresamente para su tratamiento con la finalidad de atender sus preguntas, dudas o consultas sobre nuestros servicios. Los datos serán incluidos en un fichero cuyo responsable es la Escuela de Tecnologías Aplicadas SL. y tratados de acuerdo con lo previsto en nuestra Política de Privacidad, sin perjuicio de que en cualquier momento podrá ejercitar sus derechos con arreglo a la normativa vigente.