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

bookEstado de Ataque

Explicación de la Clase AttackState

La clase AttackState es un estado específico que maneja 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 manejar la acción de ataque.

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; El nombre del estado de ataque utilizado en el animador. bool isAttacking; Una bandera para indicar si el enemigo está atacando actualmente. Animator animator; Controla las animaciones. Transform transform; La transformación del enemigo, utilizada para posicionamiento y raycasting. float range; El rango de 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 posicionamiento, un Animator para 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. Establece estos valores en 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 apropiado en el animador 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 apropiado en el animador 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 a true, indicando que la acción de ataque ha comenzado.

Método FinishMovement

Este método establece isAttacking a false, indicando que la acción de ataque ha terminado.

Método Attack

Este método realiza la acción de ataque. Si isAttacking es true, lanza un rayo en la dirección en la que el enemigo está mirando. Si el rayo golpea un objeto en el playerLayer, llama al método GetAttacked en el objeto golpeado, causando daño y terminando la acción de ataque.

Por Qué Lo Hicimos Así

  • 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 receptivo 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 de Animación: Usar parámetros del animador asegura que las animaciones del enemigo estén correctamente sincronizadas con sus ataques, proporcionando una experiencia fluida y realista.

Cómo Funciona en Contexto

Entrando en Estado de Ataque: Cuando el enemigo entra en el AttackState, se llama al método StartState, activando la animación de ataque y reiniciando la bandera isAttacking.

Durante el Ataque: El método UpdateState se llama en cada fotograma. Activa el método Attack para verificar si debe ocurrir un ataque.

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

Realizando el Ataque: El método Attack lanza un rayo para detectar al jugador y causa daño si el jugador es alcanzado.

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

Saliendo 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 receptivos y dinámicos al jugador, con transiciones suaves entre animaciones y estados.

Transición Cercana:

closeTransition: Esta transición verifica si el jugador está dentro de una cierta distancia horizontal (ThresholdDistance) del enemigo. Si se cumple la condición, se transiciona aleatoriamente a attack1 o attack2 con igual probabilidad (50% cada uno);

Ejemplo de Código:

Añadiendo closeTransition al Estado Idle:

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

Por qué lo hicimos así

El sistema de transición permite que el enemigo cambie a un estado de ataque basado en 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 de reposo: Mientras el enemigo está en el estado idle, verifica constantemente si el jugador está dentro del ThresholdDistance usando el closeTransition. Si el jugador está lo suficientemente cerca, se activa el closeTransition, y el enemigo cambia a attack1 o attack2.

Estados de ataque:

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

Al agregar este closeTransition, nos aseguramos de que el enemigo pueda interactuar con el jugador de manera más dinámica e impredecible cuando el jugador está dentro de un rango cercano. Esto mejora la jugabilidad al hacer que el comportamiento del enemigo sea más receptivo y atractivo.

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

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

Selecciona la respuesta correcta

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

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