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

csharp

Explicación de la clase AttackState

La clase AttackState es un estado específico que gestiona el comportamiento de ataque del enemigo. Esta clase hereda de la clase State e incluye métodos para iniciar, actualizar y finalizar el estado de ataque, así como para gestionar la acción de atacar.

Definición de la clase y variables miembro

Definición de la clase:

public class AttackState : State; Esta clase hereda de la clase State, lo que significa que debe implementar los métodos abstractos definidos en State.

Variables miembro:

string attackStateName; Nombre del estado de ataque utilizado en el animador. bool isAttacking; Indicador para señalar si el enemigo está atacando actualmente. Animator animator; Controla las animaciones. Transform transform; El transform del enemigo, utilizado para posicionamiento y raycasting. float range; El alcance del ataque. int damage; El daño infligido por el ataque. LayerMask playerLayer; La máscara de capa utilizada para identificar al jugador.

Constructor

El constructor inicializa el AttackState con los componentes necesarios: un Transform para la posición, un Animator para las animaciones, una máscara de capa para identificar al jugador, el nombre del estado de ataque, el valor de daño y el rango de ataque. Asigna estos valores a las variables miembro correspondientes.

Método StartState

Este método establece isStateFinished en false, activa la animación de ataque configurando el parámetro booleano correspondiente en el animator a true y reinicia la bandera isAttacking a false.

Método EndState

Este método detiene la animación de ataque configurando el parámetro booleano correspondiente en el animator a false.

Método UpdateState

Este método se llama en cada fotograma y activa el método Attack para realizar la acción de ataque.

Método StartAction

Este método establece isAttacking en true, lo que indica que la acción de ataque ha comenzado.

Método FinishMovement

Este método establece isAttacking en false, lo que indica que la acción de ataque ha finalizado.

Método de Ataque

Este método realiza la acción de ataque. Si isAttacking es true, lanza un rayo en la dirección en la que mira el enemigo. Si el rayo impacta un objeto en la playerLayer, llama al método GetAttacked en el objeto impactado, causando daño y finalizando la acción de ataque.

Razones de Esta Implementación

  • Control sobre el Comportamiento de Ataque: La bandera isAttacking permite un control preciso sobre cuándo debe ocurrir el ataque, haciendo que el comportamiento sea más sensible a los eventos del juego;

  • Ejecución Dinámica del Ataque: Al actualizar continuamente el estado de ataque del enemigo, el AttackState asegura que el enemigo pueda atacar al jugador de manera precisa y dinámica;

  • Integración con Animaciones: El uso de parámetros del animador garantiza que las animaciones del enemigo estén correctamente sincronizadas con sus ataques, proporcionando una experiencia fluida y realista.

Funcionamiento en Contexto

Entrada en el Estado de Ataque: Cuando el enemigo entra en el AttackState, se llama al método StartState, lo que activa la animación de ataque y reinicia la bandera isAttacking.

Durante el Ataque: El método UpdateState se llama en cada frame. Activa el método Attack para comprobar si debe realizarse un ataque.

Inicio del Ataque: El método StartAction establece isAttacking en true, permitiendo que el método Attack realice la acción de ataque.

Ejecución del Ataque: El método Attack lanza un rayo para detectar al jugador y causa daño si el jugador es impactado.

Finalización del Ataque: El método FinishMovement establece isAttacking en false, deteniendo la acción de ataque.

Salida del Estado de Ataque: Cuando el enemigo sale del AttackState, se llama al método EndState, deteniendo la animación de ataque. Al estructurar el AttackState de esta manera, aseguramos que el enemigo pueda realizar ataques dinámicos y responsivos al jugador, con transiciones fluidas entre animaciones y estados.

Transición Cercana:

csharp

closeTransition: Esta transición verifica si el jugador se encuentra dentro de una cierta distancia horizontal (ThresholdDistance) respecto al enemigo. Si se cumple la condición, se realiza una transición aleatoria a attack1 o attack2 con igual probabilidad (50% cada uno);

Ejemplo de código:

Agregar closeTransition al estado Idle:

stateManager.AddStateTransition(idle, closeTransition); Esta línea agrega la closeTransition al estado idle, permitiendo que la máquina de estados verifique esta condición cuando el enemigo se encuentra en estado idle.

Por qué lo hicimos así

El sistema de transiciones permite que el enemigo cambie a un estado de ataque según la proximidad del jugador, mejorando la interacción. El enfoque probabilístico para elegir entre diferentes ataques añade imprevisibilidad, aumentando el desafío e interés del juego.

Cómo funciona en contexto

Estado Idle: Mientras el enemigo está en el estado idle, verifica constantemente si el jugador está dentro de la ThresholdDistance usando la closeTransition. Si el jugador está lo suficientemente cerca, se activa la closeTransition y el enemigo transiciona a attack1 o attack2.

Estados de ataque:

Una vez en attack1 o attack2, el enemigo realiza el ataque. Después de finalizar el ataque, la toIdleTransition existente transiciona al enemigo de vuelta al estado idle, listo para verificar nuevamente la condición de closeTransition.

Al agregar esta closeTransition, aseguramos que el enemigo pueda interactuar con el jugador de manera más dinámica e impredecible cuando el jugador está a corta distancia. Esto mejora la jugabilidad al hacer que el comportamiento del enemigo sea más receptivo y atractivo.

question mark

¿Qué método es responsable de detectar y aplicar daño al jugador dentro del rango en la clase AttackState?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 7

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
Estado de Ataque

csharp

Explicación de la clase AttackState

La clase AttackState es un estado específico que gestiona el comportamiento de ataque del enemigo. Esta clase hereda de la clase State e incluye métodos para iniciar, actualizar y finalizar el estado de ataque, así como para gestionar la acción de atacar.

Definición de la clase y variables miembro

Definición de la clase:

public class AttackState : State; Esta clase hereda de la clase State, lo que significa que debe implementar los métodos abstractos definidos en State.

Variables miembro:

string attackStateName; Nombre del estado de ataque utilizado en el animador. bool isAttacking; Indicador para señalar si el enemigo está atacando actualmente. Animator animator; Controla las animaciones. Transform transform; El transform del enemigo, utilizado para posicionamiento y raycasting. float range; El alcance del ataque. int damage; El daño infligido por el ataque. LayerMask playerLayer; La máscara de capa utilizada para identificar al jugador.

Constructor

El constructor inicializa el AttackState con los componentes necesarios: un Transform para la posición, un Animator para las animaciones, una máscara de capa para identificar al jugador, el nombre del estado de ataque, el valor de daño y el rango de ataque. Asigna estos valores a las variables miembro correspondientes.

Método StartState

Este método establece isStateFinished en false, activa la animación de ataque configurando el parámetro booleano correspondiente en el animator a true y reinicia la bandera isAttacking a false.

Método EndState

Este método detiene la animación de ataque configurando el parámetro booleano correspondiente en el animator a false.

Método UpdateState

Este método se llama en cada fotograma y activa el método Attack para realizar la acción de ataque.

Método StartAction

Este método establece isAttacking en true, lo que indica que la acción de ataque ha comenzado.

Método FinishMovement

Este método establece isAttacking en false, lo que indica que la acción de ataque ha finalizado.

Método de Ataque

Este método realiza la acción de ataque. Si isAttacking es true, lanza un rayo en la dirección en la que mira el enemigo. Si el rayo impacta un objeto en la playerLayer, llama al método GetAttacked en el objeto impactado, causando daño y finalizando la acción de ataque.

Razones de Esta Implementación

  • Control sobre el Comportamiento de Ataque: La bandera isAttacking permite un control preciso sobre cuándo debe ocurrir el ataque, haciendo que el comportamiento sea más sensible a los eventos del juego;

  • Ejecución Dinámica del Ataque: Al actualizar continuamente el estado de ataque del enemigo, el AttackState asegura que el enemigo pueda atacar al jugador de manera precisa y dinámica;

  • Integración con Animaciones: El uso de parámetros del animador garantiza que las animaciones del enemigo estén correctamente sincronizadas con sus ataques, proporcionando una experiencia fluida y realista.

Funcionamiento en Contexto

Entrada en el Estado de Ataque: Cuando el enemigo entra en el AttackState, se llama al método StartState, lo que activa la animación de ataque y reinicia la bandera isAttacking.

Durante el Ataque: El método UpdateState se llama en cada frame. Activa el método Attack para comprobar si debe realizarse un ataque.

Inicio del Ataque: El método StartAction establece isAttacking en true, permitiendo que el método Attack realice la acción de ataque.

Ejecución del Ataque: El método Attack lanza un rayo para detectar al jugador y causa daño si el jugador es impactado.

Finalización del Ataque: El método FinishMovement establece isAttacking en false, deteniendo la acción de ataque.

Salida del Estado de Ataque: Cuando el enemigo sale del AttackState, se llama al método EndState, deteniendo la animación de ataque. Al estructurar el AttackState de esta manera, aseguramos que el enemigo pueda realizar ataques dinámicos y responsivos al jugador, con transiciones fluidas entre animaciones y estados.

Transición Cercana:

csharp

closeTransition: Esta transición verifica si el jugador se encuentra dentro de una cierta distancia horizontal (ThresholdDistance) respecto al enemigo. Si se cumple la condición, se realiza una transición aleatoria a attack1 o attack2 con igual probabilidad (50% cada uno);

Ejemplo de código:

Agregar closeTransition al estado Idle:

stateManager.AddStateTransition(idle, closeTransition); Esta línea agrega la closeTransition al estado idle, permitiendo que la máquina de estados verifique esta condición cuando el enemigo se encuentra en estado idle.

Por qué lo hicimos así

El sistema de transiciones permite que el enemigo cambie a un estado de ataque según la proximidad del jugador, mejorando la interacción. El enfoque probabilístico para elegir entre diferentes ataques añade imprevisibilidad, aumentando el desafío e interés del juego.

Cómo funciona en contexto

Estado Idle: Mientras el enemigo está en el estado idle, verifica constantemente si el jugador está dentro de la ThresholdDistance usando la closeTransition. Si el jugador está lo suficientemente cerca, se activa la closeTransition y el enemigo transiciona a attack1 o attack2.

Estados de ataque:

Una vez en attack1 o attack2, el enemigo realiza el ataque. Después de finalizar el ataque, la toIdleTransition existente transiciona al enemigo de vuelta al estado idle, listo para verificar nuevamente la condición de closeTransition.

Al agregar esta closeTransition, aseguramos que el enemigo pueda interactuar con el jugador de manera más dinámica e impredecible cuando el jugador está a corta distancia. Esto mejora la jugabilidad al hacer que el comportamiento del enemigo sea más receptivo y atractivo.

question mark

¿Qué método es responsable de detectar y aplicar daño al jugador dentro del rango en la clase AttackState?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

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