Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Crear Gestor de Estados | 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

book
Crear Gestor de Estados

Estado:

csharp

Métodos abstractos:

public abstract void StartState(); public abstract void EndState(); son métodos abstractos. Un método abstracto no tiene 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 requieren un comportamiento diferente.

Funcionamiento para nuestro enemigo

Herencia de estados:

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 mediante estados, donde StartState() inicializa el estado, UpdateState() actualiza el comportamiento durante el estado y EndState() realiza la limpieza después de que el estado termina.

Uso de clase abstracta: Convertir State en una clase abstracta garantiza que todos los estados específicos implementen los métodos necesarios, organizando el comportamiento del enemigo y simplificando la gestión de estados sin modificar el script del enemigo.

State Manager:

csharp

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, asigna currentState al 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 ejecutar las acciones asociadas a ese estado.

Funcionamiento para Nuestro Enemigo

Al crear 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 mediante UpdateState().

Flujo de Trabajo de 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 en AttackState y AttackState.StartState() inicia el comportamiento de ataque. En cada frame, se llama a UpdateStates(), y si el estado actual es AttackState, AttackState.UpdateState() gestiona las acciones de ataque.

Mediante el uso de la clase StateManager, es posible gestionar y alternar fácilmente entre diferentes comportamientos del enemigo de manera organizada.

Estado de Inactividad

csharp

Explicación

El constructor public IdleState(Animator animator) recibe 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 como verdadero, lo que activa la animación de inactividad. El método EndState, public override void EndState(), establece el parámetro "idle" como falso, deteniendo la animación de inactividad.

Funcionamiento para Nuestro Enemigo

Cuando el enemigo entra en el IdleState, el método StartState() establece el parámetro "idle" en el animador como verdadero, iniciando la animación de inactividad y haciendo que el enemigo parezca inactivo. Cuando el enemigo sale del IdleState, el método EndState() establece el parámetro "idle" como falso, deteniendo la animación de inactividad y preparando al enemigo para la transición a otro estado, como moverse o atacar.

Flujo de trabajo de ejemplo

El StateManager establece el estado del enemigo en IdleState, llamando a IdleState.StartState() para configurar el parámetro "idle" del animador en verdadero, iniciando la animación de reposo. Al cambiar el comportamiento del enemigo, el StateManager llama a IdleState.EndState(), configurando el parámetro "idle" en falso y deteniendo la animación de reposo. Luego, el StateManager transiciona al enemigo a un nuevo estado, como AttackState o PatrolState.

Al utilizar la clase IdleState, se garantiza que el enemigo pueda entrar y salir del comportamiento de reposo de manera fluida, haciéndolo más dinámico y realista. Esta estructura también facilita agregar o modificar el comportamiento de reposo del enemigo sin afectar otras partes del código del enemigo.

question mark

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

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 3

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

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

book
Crear Gestor de Estados

Estado:

csharp

Métodos abstractos:

public abstract void StartState(); public abstract void EndState(); son métodos abstractos. Un método abstracto no tiene 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 requieren un comportamiento diferente.

Funcionamiento para nuestro enemigo

Herencia de estados:

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 mediante estados, donde StartState() inicializa el estado, UpdateState() actualiza el comportamiento durante el estado y EndState() realiza la limpieza después de que el estado termina.

Uso de clase abstracta: Convertir State en una clase abstracta garantiza que todos los estados específicos implementen los métodos necesarios, organizando el comportamiento del enemigo y simplificando la gestión de estados sin modificar el script del enemigo.

State Manager:

csharp

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, asigna currentState al 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 ejecutar las acciones asociadas a ese estado.

Funcionamiento para Nuestro Enemigo

Al crear 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 mediante UpdateState().

Flujo de Trabajo de 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 en AttackState y AttackState.StartState() inicia el comportamiento de ataque. En cada frame, se llama a UpdateStates(), y si el estado actual es AttackState, AttackState.UpdateState() gestiona las acciones de ataque.

Mediante el uso de la clase StateManager, es posible gestionar y alternar fácilmente entre diferentes comportamientos del enemigo de manera organizada.

Estado de Inactividad

csharp

Explicación

El constructor public IdleState(Animator animator) recibe 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 como verdadero, lo que activa la animación de inactividad. El método EndState, public override void EndState(), establece el parámetro "idle" como falso, deteniendo la animación de inactividad.

Funcionamiento para Nuestro Enemigo

Cuando el enemigo entra en el IdleState, el método StartState() establece el parámetro "idle" en el animador como verdadero, iniciando la animación de inactividad y haciendo que el enemigo parezca inactivo. Cuando el enemigo sale del IdleState, el método EndState() establece el parámetro "idle" como falso, deteniendo la animación de inactividad y preparando al enemigo para la transición a otro estado, como moverse o atacar.

Flujo de trabajo de ejemplo

El StateManager establece el estado del enemigo en IdleState, llamando a IdleState.StartState() para configurar el parámetro "idle" del animador en verdadero, iniciando la animación de reposo. Al cambiar el comportamiento del enemigo, el StateManager llama a IdleState.EndState(), configurando el parámetro "idle" en falso y deteniendo la animación de reposo. Luego, el StateManager transiciona al enemigo a un nuevo estado, como AttackState o PatrolState.

Al utilizar la clase IdleState, se garantiza que el enemigo pueda entrar y salir del comportamiento de reposo de manera fluida, haciéndolo más dinámico y realista. Esta estructura también facilita agregar o modificar el comportamiento de reposo del enemigo sin afectar otras partes del código del enemigo.

question mark

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

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

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