Estado de Dash
Controlador de Animación
public class AnimatorController : MonoBehaviour
{
[SerializeField] Enemy enemy;
public void FinishMovement()
{
enemy.FinishMovement();
}
public void EndCurrentState()
{
enemy.EndCurrentState();
}
}
Propósito de AnimatorController
La clase AnimatorController
está diseñada para gestionar y activar comportamientos del enemigo a través de eventos del animador. Esto permite una integración fluida de las transiciones de animación y los cambios de estado, asegurando que el comportamiento del enemigo coincida con sus animaciones.
Definición de la Clase y Variable Miembro
Definición de la Clase:
public class AnimatorController : MonoBehaviour
define una clase que hereda de MonoBehaviour
, lo que permite que se adjunte a un GameObject
en Unity.
Variable Miembro:
[SerializeField] Enemy enemy;
es un campo serializado que permite vincular un objeto Enemy
al AnimatorController
directamente desde el Inspector de Unity.
La variable enemy
es una referencia al script del enemigo, que contiene funciones que controlan el comportamiento del enemigo.
Métodos
Método FinishMovement:
public void FinishMovement()
: Este método llama a enemy.FinishMovement()
. Está diseñado para ser llamado por un evento del animador, indicando el final de una animación de movimiento.
Método EndCurrentState:
public void EndCurrentState()
: Este método llama a enemy.EndCurrentState()
. Está destinado a ser llamado por un evento del animador para señalar el final del estado actual.
Integración con eventos del animador
Eventos del animador:
Los eventos del animador son eventos especiales que pueden colocarse en las líneas de tiempo de animaciones dentro del Animator de Unity.
Estos eventos pueden llamar funciones en scripts adjuntos al mismo GameObject
o a sus hijos.
Cómo funciona: Durante una animación, como una animación de correr o atacar, puntos específicos en la línea de tiempo pueden activar eventos.
Dash State
public class DashState : State
{
Rigidbody2D rb;
Animator animator;
Transform player;
float speed;
Vector2 scale;
Vector2 velocity;
bool stopDashing = false;
public DashState(Rigidbody2D rb, Animator animator, Transform p, float DashSpeed)
{
this.animator = animator;
player = p;
this.speed = DashSpeed;
this.rb = rb;
scale = rb.transform.localScale;
velocity = new Vector2();
}
public override void StartState()
{
isStateFinished = false;
animator.SetBool("dash", true);
stopDashing = false;
}
public override void FinishMovement()
{
stopDashing = true;
}
public override void UpdateState(float deltaTime)
{
if (stopDashing) return;
scale.x = rb.position.x > player.position.x ? -1 : 1;
rb.transform.localScale = scale;
velocity.x = scale.x * speed;
rb.velocity = velocity;
}
public override void EndState()
{
animator.SetBool("dash", false);
}
}
Explicación de la clase DashState
La clase DashState
es un estado específico que gestiona el comportamiento de deslizamiento (dash) del enemigo. Esta clase hereda de la clase State
e incluye métodos para iniciar, actualizar y finalizar el estado de dash, así como para manejar el evento de finalización del movimiento.
Constructor
El constructor inicializa la DashState
con los componentes necesarios: un Rigidbody2D
para el movimiento, un Animator
, un Transform
para el jugador y una velocidad de dash. Establece la escala inicial e inicializa el vector de velocidad.
Método StartState
Este método establece isStateFinished
en false
y activa la animación de dash configurando el parámetro booleano "dash" en el animator a true
. También restablece la bandera stopDashing
a false
.
Método FinishMovement
Este método establece stopDashing
en true
, lo que detendrá la acción de deslizamiento en el método UpdateState
.
Método UpdateState
Este método actualiza la posición y orientación del enemigo en función de la posición del jugador. Si stopDashing
es true
, el método retorna de inmediato, deteniendo actualizaciones adicionales. Ajusta la escala del enemigo para que mire al jugador, calcula la velocidad según la rapidez y aplica esta velocidad al Rigidbody2D
.
Método EndState
Este método detiene la animación de deslizamiento estableciendo el parámetro booleano "dash" en el animador a false
.
Por qué lo hicimos de esta manera
El indicador stopDashing
permite un control preciso sobre cuándo debe detenerse el dash, haciendo que el comportamiento sea más sensible a los eventos del juego. Al actualizar continuamente la posición y dirección del enemigo, el DashState
garantiza que el enemigo pueda desplazarse rápidamente y con precisión hacia el jugador. El uso de parámetros del animador asegura que las animaciones del enemigo estén correctamente sincronizadas con sus movimientos, proporcionando una experiencia fluida y realista.
¡Gracias por tus comentarios!