Godot: Máquina de estados finita. El tutorial definitivo para aprender a programar la State Machine

preview_player
Показать описание
Éste es un tutorial intermedio-avanzado donde enseñamos a programar una máquina de estados para nuestro personaje principal en Godot Engine.

Si necesidad de gestionar las animaciones con un animationPlayer y un animatrionTree, aunque también puedes seguir exactamente el mismo tutorial y aplicarlo en éstos nodos.

Una máquina de estados finita es una forma organizativa clara y limpia para poder gestionar los diferentes estados de nuestro personaje. Entendiendo a estado como cualquier situación que creas conveniente declarar como un estado con ciertas propiedades, métodos y comportamientos específicos.

Los más comunes son los típicos de estado en el suelo, en el aire, estado de "dañado" etc. Pero, cada juego, cada proyecto, cada desarrollador tendrá unos requerimiento y una visión de su estados personalizada.

En este video trato de explicar detalladamente como se genera una máquina de estados así como una manera de visualizar los requerimientos de cada estado en cada caso.

Cada estado tendrá sus propios problemas que tendremos que solucionar creativamente. Pasar ciertas señales, crear nuevos métodos o reaccionar de cierta forma delante de estímulos externos que reciba nuestro personaje.

Suele ser, creo, un concepto complejo de controlar y implementar por primera vez (la maquina de estados). Pero, altamente recomendado para escalar la legibilidad de nuestro código para cuando el proyecto empieza a crecer y a escalarse cada vez más.

Espero que sirve de ayuda, para cualquier dudad puedes usar la caja de comentarios.

Рекомендации по теме
Комментарии
Автор

Hasta ahora el mejor tutorial que vi respecto a "maquina de estados". Programo por hobby y cuando que el personaje tenia que hacer cosas complejas no conseguía mantener el código claro y limpio, cada vez que quería agregar alguna característica nueva o interacción tenia que reescribir mucho código hasta que me ganaba la frustración. Gracias por tu aporte.

carlosf
Автор

Grandes tus videos como siempre, aunque para un completo principiante en programación (como yo) de repente son algo confusos, primero estamos en un nivel basico y luego salta a modo hard! y ya otra vez regresa a basico y luego pasa por un intermedio, etc. jajaja
Ojalá pudieras sacar una serie de videos en modo basico, otra serie en intermedio y otra en avanzado, para que los que llegamos aqui a programar desde cero no de repente choquemos contra esto jajaja
Una vez mas mil gracias por tus videos, son muy buenos!! Ya que sepa más regresaré sin duda!

gp
Автор

Justo el tutorial que necesitaba! Estoy empezando con Godot 4 y me vienen super bien tus vídeos.

Muchísimas gracias por compartir tu conocimiento 😊😊

dandorf
Автор

Muchas gracias por este video, vengo de unity y aun no sabia como crear unas maquinas de estado bien chulas, pero con tu video problema solucionado, eso si yo el control de movimiento del personaje no me gusta dejárselo al player en si, sino que me gusta metérselo al State de movimiento (Creo que podría ser mejor de esta manera, no estoy seguro)

manuelmartin
Автор

Por fin llego el dia😂
Esto me podria servir para hacer jefes junto con variables que decidan que estado ejecutar aleatoriamente usando una version del sistema de dropeo de armas aleatorias que hiciste?

jaredhy
Автор

tremendo tutorial has compartido! tu manejo de godot es magistral! felicitaciones! estoy muy agradecido contigo por compartir tus conocimientos! un Abrazo grande! 👏

davidemanueldedio
Автор

Yo hice hace mucho una similar, pero el mio era mas bien tener todos los metodos en el characterBody, y estos se ejecutaban en los estados individuales, al menos me servia asi

dobstedpanopo
Автор

muy buen video este era el tutorial q buscaba sigue adelante

pd: nuevo subs

elmega
Автор

Estos temas son oro! me gustaria ver Utility AI, vi un video de introducción en otro canal famoso de godot y me quedé con ganas de verlo implementado 🤖

alfredogodoy
Автор

No pude 😵, tengo mi codigo pero me hice una bola tratando de hacer una maquina de estados para mi proyecto en 3D. Osea, tengo estados dentro de mi gdscript pero no lo puedo separar en varios gdscript y que quede funcional como antes 😓
gracias por compartir tu conocimiento

12 hrs después: Lo logré 🎉 no como lo muestras tu, pero la idea es la misma. En vez de agregar los gdscript a cada nodo. Los volví una Clase y los llamo directamente de mi script principal sin necesidad de agregarlos a nodo alguno. Solo el principal que va ligado a mi personaje jugable. Y lo mejor es que pude hacer llamados en el código de mi enemigo y me ahorre trabajo 😁.
Gracias por la orientación de tu vídeo 🦾

D_.
Автор

Gracias por el video, la verdad es que queda chulo, en Unity vi como hacerlo y quizás quedaba algo mas "limpio" al usar clases para definir Acciones y Decisiones, pero me ha gustado como lo has hecho. También probé en Unity lo ML, si algún día te interesa tratarlo en Godot me encantaría.

oscarraido
Автор

Veo que lo de la fruta, lo mencionas pero no lo modificas.
Para quien le pueda servir explico lo que yo he hecho:

Primero he puesto al Ninja frog en el grupo "player".
No se si este existía ya porque yo he estado haciendo modificaciones sobre la marcha. Yo lo tenía en el grupo "characters", por si existían más personajes que pudieran interectuar con el portal, que tuviera un nombre más generico.

Luego he creado un AudioStreamPlayer2D en el nodo de la fruta al que he llamado "SfxCollect".

Entonces en el codigo de la fruta, he modificado esto:

func
if



Por esto:

func
if body.is_in_group("player"):
var aux_string = fruit_type + "_points"
var gained_points = GeneralRules[aux_string]
body.fruit_count += gained_points
$SfxCollect.play()


*No se si Fertakus lo hizo así en su día, porque como digo he ido cambiando cosas, pero por si acaso "animated_sprite_2d" hace referencia a: @onready var animated_sprite_2d = $AnimatedSprite2D

tumas
Автор

Nooo acá me fui a la mierda jajaja iba como avión, pero esto me abrumó y según vi, seguirás usando la máquina de estados en tus otros videos por lo que tendré que hacerla.

Voy a tardar un poco así que te dejaré las preguntas que tengo en este video, pero antes muchas gracias por el tiempo que inviertes para enseñar y en responder los comentarios.

Preguntas:

1. ¿Hay alguna manera de crear un sector secreto? Me refiero a cuando atraviesas una pared y al hacerlo se hacen visibles los item y cosas que antes no se veían. Es un recurso que se usa mucho en juegos plataformeros y me dio curiosidad.

2. ¿Puedes crear un "dash" o un deslizamiento apretando dos veces la flecha (o el botón que sea)?

3. ¿Hay algo después de la muerte?

4 ¿Por qué los que leen esto son tan geniales e inteligentes?

¡Eso! Gracias de nuevo y quedo atento a tus comentarios.

MaritoRelax
Автор

se puede realizar un scripts par ataque? ya que no vi nada en relación a los ataque melee. un abrazo!

sebastianwolff
Автор

Hola, me gustaria saber si se podria crear state_machine de nadar ?

truenincillo
Автор

Gracias por tus conocimientos!!! A ver si me pongo ya con la machine, el problema es que lo hicimos con otra version de godot y ahora en el bomberman use la ultima... xD quiero implementar en ambos la maquina de estado. Porque hay varios bugs, que igual se podrian corregir. A los enemigos tqmbien se les puede añadir machinestate no?

lordav
Автор

Gracias carck muy buen video, yo intente implementar la maquina de estados de un sistema de combos con rotacion del mouse, y no se solo me pasa a mi pero en cada funcion que hereda de la clase state no puedo poner mas de un condicional (solo uno ) dato interesante

jhdev
Автор

minuto 4:07 escelente mensaje subliminal... se merece una suscripcion

diegosayago
Автор

Muchas gracias por el tutorial, pero tengo una duda y es:
¿como puedo acceder a "direction" dentro de los estados para usarlo dentro de otras funciones como "state_input"?

neomartscp
Автор

Puedes hacer un tutorial de como hacer un boss que siga un patrón de moviento pero con ataques al azar

Rolan_Dot