Sistemas que crean ecosistemas: Diseño de juegos emergentes

EDUARDO ORIZ / UNITY TECHNOLOGIESSenior Content Marketing Manager
Dec 7, 2021|10 minutos
Sistemas que crean ecosistemas: Diseño de juegos emergentes
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.

Con unos sencillos scripts, los diseñadores de juegos pueden crear sistemas en sus juegos que den lugar a una jugabilidad interesante e inesperada, una especie de caos organizado para deleitar y cautivar a los jugadores. Nos sentamos con el diseñador de juegos Christo Nobbs, que nos explica su enfoque del diseño para una jugabilidad emergente con la ayuda de algunas funciones clave de Unity.

Tras años de conversaciones con creadores individuales y estudios de juegos, sabemos que cuando los diseñadores de juegos crean mecánicas de juego y diseño en Unity, pueden demostrar la visión del juego de forma clara y con mayor detalle al resto del equipo.

Hemos creado un nuevo libro electrónico, The Unity game designer playbook, para diseñadores de juegos que quieran aprender a crear prototipos, elaborar y probar la jugabilidad en Unity. Tanto los diseñadores de juegos noveles como los experimentados pueden utilizar esta guía cuando empiecen a añadir conocimientos de Unity a su perfil.

Christo Nobbs, diseñador técnico de juegos especializado en diseño de juegos de sistemas y Unity (C#), ha colaborado en el libro electrónico. En esta entrada de blog, la primera de una serie para diseñadores de juegos, amplía algunos de los consejos y ejemplos para diseñar sistemas que ofrece en el libro electrónico.

Proyecto de prueba
Imagen de un proyecto de prueba para ilustrar un sistema de propagación de incendios y el caos potencial que podría resultar.

En el diseño de juegos, un sistema útil debe tener una función clara, contener datos y ser modular. De esta manera, no sólo puede interactuar con otro sistema, sino que también interactúa consigo mismo en otros GameObjects de diversas maneras. Cuando se piensa en un sistema de juego sistémico, a menudo también puede ayudar el hecho de imaginarlo no como una arquitectura completa, sino como una pieza de funcionalidad que puede ejecutarse recursivamente a través del juego.

La combinación de estos sistemas permite crear ecosistemas únicos que reaccionan a las acciones del jugador y se equilibran mediante "palancas de diseño" (en lugar de valores ocultos y codificados). Estas palancas se ponen en marcha para manipular sus datos, lo que da lugar a un juego sistémico.

La mayoría de los juegos tienen al menos un sistema, ya sea una mecánica única con valores que se ajustan con el juego o una red de sistemas. En un juego de estrategia como Age of Empires, en el que el jugador tiene que aprender a aprovechar y manipular los recursos para progresar y vencer a sus rivales, son complejos ecosistemas los que rigen la jugabilidad.

En última instancia, son los propios diseñadores del juego quienes deciden cómo quieren que el jugador avance por el juego. ¿El juego debe seguir una trayectoria lineal y guiada, o debe estar impulsado por uno o varios sistemas que permitan resultados orgánicos y emergentes?

Los sistemas modulares pueden impulsar una jugabilidad interesante

A la hora de diseñar un sistema pequeño, hay que dar prioridad a su modularidad y a su capacidad para interactuar consigo mismo y con otros sistemas, ya que estas características pueden generar bucles de juego interesantes. Hay que pensar en las posibles cadenas de reacciones que pueden resultar de la colisión de un sistema consigo mismo a través de otro objeto, o de la creación de una yuxtaposición entre dos sistemas simples. Intente siempre crear sistemas cuya función esté clara para el jugador, de modo que tenga una oportunidad razonable de aprender cómo funciona un sistema determinado para obtener una ventaja.

Oxígeno no incluido
Oxígeno no incluido por Klei

Un ejemplo de reacción en cadena es el del juego Oxygen Not Included, en el que el objetivo con el bucle principal es equilibrar una serie de sistemas para alcanzar un estado de utopía simbiótica para seguir progresando. Otro ejemplo proviene de Divinity Original Sin 2,de Larian Studios, donde los mobs que explotan para atacar ya no pueden hacerlo si el jugador los moja, facilitando así el combate. O bien, el jugador puede prender fuego al suelo para protegerse de la turba cuando corra hacia él.

Un sistema modular puede aportar más valor a tu juego porque puedes utilizar partes de un sistema para crear otro diferente. Una característica de Unity que Christo utiliza para casi todo son las Curvas de Animación. Como él dice, "el tratamiento de sus datos es casi siempre el mismo. Dan más control que un único valor para equilibrar. Y puedes añadir facilidades a la mecánica o incluso anular los límites del sistema para afinar un detalle".

Un enfoque modular del diseño también permite informar a los programadores con la mayor precisión posible, de modo que les resulte más eficaz editar y depurar los sistemas de juego y reutilizarlos en distintas configuraciones a lo largo del juego.

Palancas de diseño

Las palancas de diseño sirven para ajustar valores con el fin de manipular un resultado, por ejemplo para aumentar o reducir la dificultad del juego de modo que resulte gratificante y proporcione el nivel de complejidad que se pretende. Con las palancas de diseño, puede probar y ajustar repetidamente hasta obtener el resultado deseado.

Las palancas de diseño pueden utilizarse en las fases de concepto y prototipo del desarrollo del juego, hasta el pulido posterior a la producción. Christo dice que añade palancas de diseño cuando traza sus ideas en un diagrama de flujo. Intenta pensar desde el principio de tu proyecto qué interruptores y palancas necesita tu sistema para poder ajustarlo y explorar las posibilidades de juego sin depender en gran medida de la refactorización del código más adelante.

La siguiente imagen es de un gráfico que representa un modo de juego sencillo en el que los enemigos están in situ al inicio y el jugador entra bloqueado y cargado. Esencialmente, tienen que matar enemigos, pero manipulando las palancas de diseño se puede hacer una transición en la jugabilidad para cambiar el enfoque. En una configuración, el juego se centra en conseguir una puntuación alta, matando rápidamente a muchos enemigos en el tiempo límite, mientras que en otra, el énfasis se pone en matar a una cantidad determinada de enemigos en un tiempo más corto, dejando tiempo a los jugadores para recoger el botín caído antes de ser extraídos.

Un sencillo gráfico de diseño del juego
Un diseño de juego sencillo

Este sistema también podría utilizarse para crear una tormenta de balas completa con gotas excelentes y diferentes tipos de munición con sus propias propiedades. Si añades más palancas de diseño, como un tiempo de espera para el respawn, puedes ampliar aún más el sistema.

Un sistema para fabricar armas en Escape from Tarkov

Escape from Tarkov de Battlestate Games es otro buen ejemplo de diseño sistémico de juegos en Unity. El juego cuenta con un sistema de artesanía para crear un arma con su propio conjunto de datos, como se ve en la imagen de abajo. Este conjunto de datos influye en las características del arma y en la jugabilidad general del arma, de forma similar a la salud del jugador. Si el jugador sufre una fractura en una extremidad o una dolencia, su arma se vuelve más difícil de usar, mientras que un jugador sano tiene mejor control sobre el arma.

Arma de Escape from Tarkov
El sistema de fabricación de armas de Escape from Tarkov

La relación entre un sistema, las armas, y el otro, la salud, anima al jugador a valorar no sólo su vida, sino también las armas de mejor rendimiento. Nadie quiere un AK sin guardapolvo ni culata rebotando mientras falla disparo tras disparo, señal inequívoca de que el arma es una mala opción en su configuración actual.

También hay una amplia selección de tipos de munición con diferentes propiedades, así como de armaduras. El tipo de munición y armadura de tu oponente determina en qué parte de su cuerpo tienes que dispararle para infligirle el mayor daño posible, lo que crea un metajuego. Estos sistemas, cada uno con su conjunto de señales visuales, están equilibrados para crear la "esencia" de juego que buscaban sus diseñadores.

Fuga de Tarkov
Los sistemas de Escape from Tarkov están diseñados para alcanzar el realismo.
ScriptableObjects como palancas de diseño

Una forma de configurar palancas de diseño en Unity es con ScriptableObjects. Pueden utilizarse como contenedores de datos que se guardan como activos y a los que se hace referencia desde los scripts sin crear dependencias con otros objetos de una Escena.

Puedes crear varios activos ScriptableObject que contengan diferentes conjuntos de valores que puedes compartir e intercambiar para cambiar secciones enteras del juego, de forma similar a los preajustes. Tus cambios se guardan en el modo Play con ScriptableObjects, así que una vez que salgas no tienes que volver a ninguna nota e implementar los cambios.

Por ejemplo, al crear el prototipo de un personaje, puede cambiar la sensación del personaje sustituyendo el activo ScriptableObject por otro que contenga un conjunto diferente de valores. Se trata de una posible puerta de entrada a la creación de prototipos de potenciadores y debilitadores o a la conexión de la selección de personajes con los perfiles.

Digamos que estás haciendo un juego de disparos y has implementado un sistema de armas con valores arbitrarios para acciones como retroceso, cadencia de tiro, precisión, modos de disparo, ajustes de audio, ajustes VFX, etc. Puede crear cualquier número de nuevos perfiles de armas y ajustar su configuración en el modo de juego, donde se guardan los cambios, todo a la vez. También puedes enviar estos ScriptableObjects preestablecidos a y desde los miembros de tu equipo para que te den su opinión, lo que resulta útil cuando intentas encontrar la sensación adecuada para la jugabilidad.

Las palancas de diseño pueden reemplazar variables individuales en código como propiedades públicas, y pueden ser limitadas por su rango utilizando el RangeAttribute de Unity, el cual limita flotadores o enteros en su script a un cierto rango mientras les permite ser mostrados como deslizadores en el Inspector. La intención es manipular las palancas sobre la marcha, no sólo en el modo Reproducir, por lo que también es aplicable si se está ejecutando en el modo Editar o probando una herramienta.

Paneles personalizables en Unity, captura de pantalla
1) Los atributos de rango, información sobre herramientas y cabecera. Los inspectores pueden adaptarse a sus necesidades de diseño. 2) Un inspector personalizado creado con Odin, disponible en la Tienda de Activos 3) Datos guardados en ScriptableObjects que pueden servir para crear diferentes conjuntos de datos o perfiles, en este caso, diferentes ataques especiales.

En los juegos de supervivencia, entre otros géneros, el jugador espera un abanico de opciones que deriven en consecuencias lógicas y razonables, lo que le impulsa a idear una solución para cada reto. ¿Cómo se puede diseñar un sistema para que tanto los retos como las soluciones sean en cierta medida resultado de la emergencia?

Veamos un ejemplo en el que el jugador necesita permanecer en una zona para sobrevivir, como en el juego Don't Starve del estudio Klei. El jugador puede permanecer cerca de un fuego para evitar que el enemigo ataque. El fuego también puede utilizarse para cocinar alimentos y mantener calientes a los jugadores. Sin embargo, si el fuego se acerca demasiado al jugador, a la comida o a objetos inflamables, los quemará.

¿Qué tipo de sistema se necesita para crear reacciones en cadena como la descrita anteriormente? Podrías simplemente crear un Volumen para que el jugador se pare en él que le dé calor con el tiempo, o hacer una propagación lineal del fuego como sistema. Pero, ¿por qué no enfocarlo con una lente de diseñador más centrada en el sistema? Quieres obligar al jugador a reaccionar en una situación que es el resultado de una reacción en cadena de sistemas individuales de propagación de fuego que chocan entre sí y con otros sistemas que existen en el mundo del juego.

Colisionadores de cápsulas en nuestro proyecto de ejemplo
Los Colisionadores de Cápsulas indican el área donde el calor puede ser aplicado de un GameObject a otro, siempre que tengan el componente del sistema de propagación de fuego conectado, creando una reacción en cadena. Cuando un GameObject está ardiendo, el área se vuelve roja, indicando que se está aplicando calor. Los GameObjects que reciben calor se han vuelto amarillos, indicando que se están calentando, antes de encenderse y volverse rojos.

Podrías tener un sistema en el que los árboles crecieran en una zona definida del terreno alrededor de un estanque a lo largo del tiempo. Estos árboles brotarán y crecerán hasta alcanzar el límite de espacio. Cuando maduran, los árboles pueden talarse y convertirse en madera, que, por supuesto, también es inflamable.

El jugador puede utilizar esta madera para construir objetos, como una elegante silla de madera, o hacer con ella una pequeña hoguera junto al estanque para calentarse y secarse después de nadar. Pero, ¿qué pasa si le das al jugador la posibilidad de encender la hoguera?

El sistema de inflamabilidad de la madera no es complejo, pero si algo se incendia, emite calor en un radio, y si ese valor de calor supera el límite del objeto de madera o árbol cercano, estas cosas también se incendiarán (propagación simple). Así, el jugador, al encender su hoguera, ha prendido fuego a su bonita silla de madera. Ahora el jugador tiene que coger la silla y tirarla al agua para apagar el fuego, pero mientras lo hace, la hoguera prende fuego al árbol más cercano, y ahora tienes un incendio forestal entre manos.

Incluso un sistema pequeño y contenido como el de este ejemplo puede crear experiencias divertidas y "sin guión" para los jugadores. Además, es esencial centrarse en el resultado que se desea para el jugador, en lugar de en un diseño demasiado ligado a la realidad, que le dará menos capacidad para crear resultados inesperados.

En este ejemplo, en Unity, puedes crear posibilidades emergentes almacenando tus palancas de diseño en un ScriptableObject colocado sobre cualquier cosa que quieras que se incendie. Empecemos por la madera en un mundo en el que un árbol muerto ya está ardiendo junto al borde del agua, pero se inclina hacia el agua, y nuestro jugador necesita calentarse.

En este ejemplo, la madera tiene un ScriptableObject con varios valores.

Objeto programable
Objeto programable
Código del objeto scriptable
Código del objeto scriptable

Veamos estos valores con más detalle:

  • Temperatura por defecto: Un valor de marcador de posición, si no hay nada que heredar de un estado global. Si son globalmente altas o bajas, podemos afectar a la sensación de todo el sistema, ya que unas temperaturas más altas podrían provocar un incendio forestal, suponiendo que todos los árboles utilicen el sistema de propagación del fuego.
  • Temperatura actual: La temperatura de un elemento al calentarse o enfriarse, que determina si un elemento ha ardido o no (si el valor de temperatura actual es superior al valor de resistencia).
  • Temperatura de combustión: Temperatura que debe alcanzar un objeto antes de incendiarse.
  • Velocidad de calentamiento: La rapidez con la que se calienta el objeto cuando se encuentra en el radio de otra fuente de calor.
  • Tasa de enfriamiento: La rapidez con la que el artículo vuelve a su temperatura "sin calentar", que podría denominarse retención o calidad térmica, siempre que el nombre de la palanca de diseño sea autodescriptivo.
  • Velocidad de combustión: La rapidez con la que el artículo se quemará con el tiempo
  • Combustible: Cuánto combustible tiene el artículo cuando se quema
  • Resistencia al calor: La fuerza del calor dentro del radio
  • Radio de calor: Alcance o extensión del calor

Con un poco de código de juego de apoyo, puede tener un objeto junto a otro incendiándose. Puedes almacenar perfiles de tus prototipos y probar configuraciones salvajemente diferentes hasta que encuentres los puntos de ruptura, y luego sujetar esos valores con atributos.

Prototipos con activos de la Tienda de Activos
Prototipos con activos de la Tienda de Activos

No existe un diseño para que el fuego quede bloqueado por el agua, pero si no hay nada inflamable en el agua, el fuego no se propagará si no puede llegar al otro lado, a menos que se añada un nuevo sistema.

Este ejemplo de un sistema de propagación de incendios ofrece varias formas de crear el mismo resultado jugando con el combustible, la velocidad de combustión y la fuerza del calor. Y puedes crear nuevos resultados, por ejemplo sustituyendo el combustible por "salud", para obtener un rango constante para controlar cuándo cae un árbol sin perder funcionalidad. Cuando un árbol alcanza una salud baja, tendrá una alta probabilidad de caer. Ahora, cuando un árbol en llamas alcanza una salud baja, puede caer, creando un caos absoluto cuando se deja sin controlar por el jugador en una zona de objetos combustibles.

A medida que vayas añadiendo más sistemas a tu entorno, crearás un ecosistema de sistemas que pueden reaccionar entre sí. Suponiendo que el jugador pueda cosechar, construir y fabricar objetos con madera y que todos hereden nuestro sistema de propagación del fuego, ¡el caos podría estar a la vuelta de la esquina si no tienes cuidado!

Objeto scriptable en Unity
Un activo de datos de objeto programable

Puede crear una configuración de propagación de incendios muy volátil reduciendo el Umbral de Combustión y aumentando la Tasa de Calentamiento para que los objetos se quemen más rápidamente. Aumenta el radio para conseguir una dispersión más rápida e incontrolable. La tasa de calentamiento está limitada de 0 a 50 para proporcionar granularidad; la fuerza de calentamiento se puede utilizar para multiplicar este valor, pero usted quiere mantenerlo dentro de un rango razonable. Una Intensidad de Calor de 4 ampliará el Índice de Calor a un rango de 0 a 200, lo que es exagerado y provocaría un incendio forestal en cuestión de segundos. Como el jugador no tendrá tiempo de reaccionar para controlar la llamarada, no es una gran experiencia de juego.

Ajustar el objeto scriptable
Ajustar el objeto scriptable

Aumentar el Umbral de Combustión a 300 proporciona un sistema de propagación del incendio mejor equilibrado. El jugador puede realizar otras tareas antes de que estalle un incendio y, cuando lo hace, tiene tiempo de reaccionar y controlarlo si es rápido. Sobre todo si tienen la posibilidad de talar árboles, construir barreras o acceder a un sistema de agua igualmente sistémico y sencillo.

Puede ampliar aún más el sistema de propagación del incendio introduciendo un valor de resistencia para los objetos situados dentro del radio de calor de un incendio. Esto permitiría tener fuegos de temperaturas variables, o introducir revestimientos ignífugos en las estructuras como posible mejora. Probablemente sea exagerado, pero es un ejemplo de cómo pensar en el diseño de la jugabilidad de una manera sistemática que puede dar al jugador más posibilidades de sobrevivir y prosperar en un entorno de bosques fríos al interactuar con el sistema de fuego.

Un momento muy memorable Don't Starve de Klei, cuando se produce un incendio forestal
Un momento muy memorable Don't Starve de Klei, cuando se produce un incendio forestal

El ejemplo de los sistemas de propagación de incendios muestra cómo se puede tomar una idea mecánica lineal y transformarla en una experiencia interesante que permita al jugador resolver retos mediante el aprendizaje y la comprensión de los sistemas del juego. Y cuando el sistema no necesita imitar la realidad, se evita tener que añadir complejidad y abstracciones.

Con este sencillo ejemplo, este post explora cómo se pueden diseñar sistemas modulares, pequeños y sencillos con interactividad que creen un mayor ecosistema de juego que pueda equilibrarse con palancas de diseño que puedas ajustar e iterar con las aportaciones de tus colegas. Estos elementos pueden crear momentos inesperados de diversión, deleite y suspense para sus jugadores, contribuyendo a hacer de su juego una experiencia verdaderamente única.

Obtén muchos más consejos, instrucciones e inspiración para diseñar y exprimir la jugabilidad en Unity en nuestro nuevo libro electrónico disponible de forma gratuita.