Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Crear Gestor de Estado | Comportamiento del Enemigo
Juego de Lucha en Unity
course content

Contenido del Curso

Juego de Lucha en Unity

Juego de Lucha en Unity

1. Sistema de Animación de Unity
2. Comportamiento del Jugador
3. Comportamiento del Enemigo
4. Mejorar el Juego
5. Mejorar el Juego de Flappy Bird

bookCrear 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.

¿Qué método se llama para actualizar el estado actual en la clase `StateManager`?

¿Qué método se llama para actualizar el estado actual en la clase StateManager?

Selecciona la respuesta correcta

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 3
some-alt