Contenido del Curso
Juego de Lucha en Unity
Juego de Lucha en Unity
Crear Gestor de Estado
Estado:
Métodos Abstractos:
public abstract void StartState();
public abstract void EndState();
son métodos abstractos.
Un método abstracto no tiene un cuerpo (implementación) aquí y debe ser
implementado por cualquier clase no abstracta que herede de esta clase State
.
Método Virtual:
public virtual void UpdateState() {}
es un método virtual.
Un método virtual tiene una implementación (en este caso, un cuerpo vacío {}
), pero puede ser sobrescrito por clases derivadas si necesitan un comportamiento diferente.
Cómo Funciona para Nuestro Enemigo
Herencia de Estado:
La clase State
será heredada por otros estados específicos. Por ejemplo, podríamos tener clases como IdleState
, AttackState
y PatrolState
que heredan de State
.
Cada uno de estos estados implementará sus propias versiones de StartState()
, UpdateState()
, y EndState()
.
Comportamiento del Enemigo:
El comportamiento del enemigo se gestiona a través de estados, con StartState()
inicializando el estado, UpdateState()
actualizando el comportamiento durante el estado, y EndState()
limpiando después de que el estado termina.
Uso de Clase Abstracta:
Hacer que State
sea una clase abstracta asegura que todos los estados específicos implementen los métodos necesarios, organizando el comportamiento del enemigo y simplificando la gestión de estados sin cambiar el script del enemigo.
Gestor de Estados:
Explicación
El constructor public StateManager(State startingState)
inicializa el StateManager
con un estado inicial. Establece currentState
en startingState
y llama a currentState.StartState()
para inicializarlo.
El método ChangeState
, public void ChangeState(State newState)
, cambia el estado del enemigo. Llama a currentState.EndState()
para limpiar el estado actual, establece currentState
en el nuevo estado, y luego llama a currentState.StartState()
para inicializar el nuevo estado.
El método UpdateStates
, public void UpdateStates()
, actualiza el estado actual llamando a currentState.UpdateState()
para realizar las acciones asociadas con ese estado.
Cómo Funciona para Nuestro Enemigo
Cuando creamos un StateManager
para nuestro enemigo, el constructor inicializa el estado inicial. Cuando el enemigo necesita cambiar su comportamiento, se llama al método ChangeState
, finalizando el estado actual con EndState()
, estableciendo el nuevo estado e inicializándolo con StartState()
. Durante el juego, el método UpdateStates
se llama repetidamente para ejecutar las acciones del estado actual a través de UpdateState()
.
Flujo de Trabajo Ejemplo:
El enemigo comienza en un IdleState
, con el StateManager
creado y IdleState.StartState()
llamado para configurar el comportamiento de inactividad. Cuando el enemigo detecta al jugador, se llama a ChangeState(new AttackState())
, finalizando el comportamiento de inactividad con IdleState.EndState()
. El estado actual se establece entonces en AttackState
, y AttackState.StartState()
inicia el comportamiento de ataque.
Cada fotograma, se llama a UpdateStates()
, y si el estado actual es AttackState
, AttackState.UpdateState()
maneja las acciones de ataque.
Al usar la clase StateManager
, podemos gestionar y cambiar fácilmente entre diferentes comportamientos de nuestro enemigo de manera organizada.
Estado de Inactividad
Explicación
El constructor public IdleState(Animator animator)
toma un objeto Animator
como parámetro y lo asigna a la variable animator
de la clase. El método StartState
, public override void StartState()
, establece el parámetro booleano "idle" en el animador a verdadero, activando la animación de inactividad. El método EndState
, public override void EndState()
, establece el parámetro "idle" a falso, deteniendo la animación de inactividad.
Cómo Funciona para Nuestro Enemigo
Cuando el enemigo entra en el IdleState
, el método StartState()
establece el parámetro "idle" en el animador a verdadero, iniciando la animación de inactividad, haciendo que el enemigo parezca inactivo. Cuando el enemigo sale del IdleState
, el método EndState()
establece el parámetro "idle" a falso, deteniendo la animación de inactividad y preparando al enemigo para la transición a otro estado, como moverse o atacar.
Ejemplo de Flujo de Trabajo
El StateManager
establece el estado del enemigo en IdleState
, llamando a IdleState.StartState()
para establecer el parámetro "idle" del animador a verdadero, iniciando la animación de inactividad. Al cambiar el comportamiento del enemigo, el StateManager
llama a IdleState.EndState()
, estableciendo el parámetro "idle" a falso y deteniendo la animación de inactividad. El StateManager
luego transiciona al enemigo a un nuevo estado, como AttackState
o PatrolState
.
Al usar la clase IdleState
, podemos asegurar que nuestro enemigo pueda entrar y salir del comportamiento de inactividad de manera fluida, haciéndolo más dinámico y realista. Esta estructura también facilita agregar o modificar el comportamiento de inactividad del enemigo sin afectar otras partes del código del enemigo.
¡Gracias por tus comentarios!