06 diciembre 2024

Curso "Mastering Game Feel in Unity: Where Code Meets Fun!" de GameDev.tv

Portada curso
Sigo haciendo los cursos del ultimo pack de Humble Bundle que compré, con cursos de GameDev.tv. Esta vez le ha tocado a "Mastering Game Feel in Unity: Where Code Meets Fun!". Un curso de unas 8 horas enfocado a desarrolladores que ya hayan hecho cursos introductorios y quieran empezar a mojarse los dedos de los pies en materias más avanzadas. Lo puedes comprar en la misma plataforma de GameDev.tv o en Udemy.

Para ello, el autor parte de un juego ya hecho con lo que se aprende en el nivel básico. Un shoot'em up 2D, en el que movemos a nuestro personaje con el teclado y apuntamos con el ratón. En este punto, el juego es completamente funcional, pero es plano y aburrido. La tesis del autor es que basta añadir pequeños detalles puntuales para hacer que el juego de vuelva tremendamente atractivos y sugerente. Casi todos esos detalles responden a la idea de retroalimentar al jugador, reforzando visualmente sus acciones. Si el jugador dispara, la cámara debe vibrar levemente; si hace estallar una granada, la cámara debe vibrar con más fuerza. Si el jugador se mueve, su personaje debe oscilar en el sentido del movimiento y levantar una leve estela de polvo. Y así toda una larga serie de ejemplos, cada uno de los cuales sirve para probar una funcionalidad diferente de Unity.

Con las vibraciones de cámara se introduce muy por encima los impulsos de Cinemachine. Las estelas de polvo, o las explosiones, son una excusa para perderle el miedo a los sistemas de partículas. Se dota al personaje principal de la capacidad de volar con un jetpack, lo que sirve para configurar un Trail Renderer. Le aporta vida al escenario utilizando las capacidades de iluminación 2D del URP de Unity, y le saca un juego inesperado a los colores HDR con un mero postprocesado Boom. Tampoco descuida la parte del sonido, lo que sirve para usar por primera vez (al menos en mi caso) el AudioMixer de Unity.

Por tanto, toca muchas cosas. Todas a nivel de ejemplo. Ninguna con profundidad, pero sí con el suficiente detenimiento como para perderle el miedo a determinadas herramientas de Unity y que las puedas ubicar mentalmente, reconociendo en qué situaciones te pueden servir. Cuando llegue el momento de emplearlas ya tendrás tiempo para profundizar.

Donde me he separado bastante del curso es a nivel de código. No digo que el autor programe mal, ni mucho menos, pero su manera de organizar las cosas no me ha acabado de encajar. Es una cuestión de gustos. Por poner un ejemplo, tiende a usar eventos para suscribir métodos dentro de la misma clase del evento y, sin embargo, tiende a abusar (en mi opinión) de la referencia directa entre componentes. Yo tiendo a trabajar al revés, usando llamadas directas a métodos dentro de la misma clase, referencias a componentes que están por debajo del llamante y eventos para comunicar cosas hacia arriba en la jerarquía o entre componentes al mismo nivel. No digo que mi manera de programar sea mejor, pero sí que me siento más cómodo con ella que con el estilo del autor. Al final he ido implementando el código a mi manera y, conforme avanzaba el curso, este se ha ido pareciendo cada vez menos al del autor. No es nada grave. Te lo comento porque si haces el curso, y no te encaja cómo programa el autor, no tengas miedo a hacer las cosas a tu manera. Probablemente aprendas mucho más que limitándote a copiar el código del profesor. 

También es cierto que los cursos de GameDev.tv te dan margen para hacer las cosas a tu manera. Es una seña de identidad de ellos que, cada poco tiempo, te van proponiendo desafíos. En cada uno de ellos, el profesor te describe funcionalmente lo que se quiere conseguir y luego te propone que pares el video y que intentes implementarlo tú mismo. Al reanudar el video, el profesor te explica cómo lo ha resuelto él. Si te has quedado atascado, su implementación te ayuda a resolverlo; y si has conseguido resolverlo, la manera de hacerlo del profesor te puede descubrir nuevas opciones que puede que no hubieses tenido en cuenta. En todo caso, me parece una manera mucho más interesante, divertida y provechosa de hacer un curso que limitarse a seguir fielmente los pasos del profesor. 

Lo único que hay que tener en cuenta es que, con este método, lo normal es que tu implementación se vaya separando progresivamente de la del profesor, por lo que no es raro que en los capítulos finales tengas que invertir algo más de tiempo viendo cómo adaptar lo que va haciendo el profesor a tu propia versión del código. Es cierto que empleas mucho más tiempo que el que dice cada capítulo que vas a emplear, pero creo que el proceso es mucho más didáctico.

Por tanto, no me arrepiento de haber hecho el curso. Me ha resultado entretenido, interesante y lo he acabado habiendo aprendido bastantes posibilidades de Unity que antes ignoraba. Que un curso te aporte eso no está nada mal.

23 noviembre 2024

Curso "Unity Shader Graph: Create Procedural Shaders & Dynamic FX" de GameDev.tv

De aquí a fin de año estoy haciendo todos los cursos que puedo, antes de dedicarme de lleno a mi nuevo proyecto. Estoy optando por los cursos de GameDev.tv que venían en un pack de Humble Bundle que adquirí hace poco. Los cursos de este pack están en la plataforma original de GameDev.tv, aunque la gran mayoría se pueden encontrar también en Udemy. Dado que hace poco acabé un curso de Penny de Byl sobre shaders en Unity, este que nos ocupa parecía la progresión natural.

A diferencia del de Penny de Byl, este curso no implementa shaders en código sino el lenguaje visual para shaders (Shader Graph) que incluye Unity. Los shader graph me siguen pareciendo una opción confusa frente al código, pero he de reconocer que el código de los shader de Godot me resulta inmensamente más sencillo que el CG/HLSL de Unity. Sospecho que en Godot seguiré usando código para los shaders, pero en Unity tirare por los shader graph (aunque me pese).

Este curso utiliza varios ejemplos para explicarte cómo utilizar los shader graph. Estos ejemplos van en un orden creciente de complejidad, empezando por los más sencillos de desplazamiento de vértices hasta el más complejo para emular el movimiento del mar, pasando por otros para simular fuego o nieve. El del fuego, la nieve y el fuego fueron los que más me aportaron, aunque el de la nieve tiene partes que están explicados de manera muy confusa y atropellada y fue el único que no me acabó de salir bien.

En general, el curso cumple con creces el objetivo de que le pierdas el miedo a los shader graph, aunque adolece del mismo problema que otros muchos cursos sobre shaders: centrarse en cómo implementar determinados shaders y no explicar por qué se implementan así. Con demasiada frecuencia, el curso se reduce a enumerar los nodos que hay que desplegar y cómo hay que conectarlos entre sí. Aunque puedes tirar de la documentación de Unity (por cierto excelente) para cada nodo, esta se limita a explicarte las entradas y salidas de un nodos, así como su operativa más inmediata, pero no te ofrece el contexto y los conceptos más amplios que hay detrás. En este sentido, creo que el curso de Penny de Byl que mencioné en mi artículo anterior hace un esfuerzo mucho mayor para que entiendas los conceptos que hay detrás de la implementación de cada shader. Es cierto que al final he ido avanzando en el curso y, en general, las cosas me han ido saliendo, pero me ha dado la sensación de que muchas cosas las he implementado más por intuición que por certeza y no estoy seguro de si esa intuición viene por mérito del profesor de este curso o más bien porque ya he hecho varios cursos sobre el tema y, por muy torpe que siga en esta disciplina, siempre queda algo.

Lo que me ha gustado mucho es la estructura orientada a desafíos que ya he observado en otros cursos de GameDev.tv. Por lo que ya he visto en otros cursos que he hecho, parece ser marca de la casa el explicarte determinadas cosas del ejemplo y luego pedirte, a modo de desafío, que implementes por ti mismo el siguiente tramo, usando lo recién explicado. Tras una pausa se explica la resolución del desafío para que contrastes tu solución o, en caso de que no hayas conseguido resolverlo, veas cómo se hacía. Esa dinámica hace bastante participativos los cursos, te mantiene interesado y te fuerza a poner en práctica lo recién explicado. Parece mentira todo lo que aprendes cuando te pones manos a la obra. He de reconocer que hecho de menos esa manera de funcionar cuando hago otros cursos con una dinámica más clásica, meramente expositiva.

Es en inglés, pero el profesor tiene buena pronunciación y se le entiende bien; además, puedes activar subtítulos (en inglés) por si te costase entender alguna palabra. En general se sigue bastante bien.

¿Merece la pena? Yo no me lo compraría por su precio completo. Me parece un precio excesivo. Pero sí puede merecer la pena si aprovechas una de las frecuentes rebajas, y te lo compras por 10 ó 12 €, o integrado en un pack más amplio de cursos.