Agregar Partículas
Explicación de los Cambios en el Método Update
private void Update()
{
stateManager.UpdateStates(Time.deltaTime);
scale.x = transform.position.x > player.position.x ? -1 : 1;
transform.localScale = scale;
}
El método Update
en el script del enemigo ahora incluye lógica para actualizar el gestor de estados, asegurar que el enemigo mire hacia el jugador y manejar un caso específico en el que el enemigo está en un DeathState
. Esta lógica se añadió para evitar que el enemigo siga mirando al jugador después de haber muerto.
Componentes del Método
Actualización del StateManager
stateManager.UpdateStates(Time.deltaTime)
Esta línea actualiza el gestor de estados, pasando el tiempo transcurrido desde el último frame (Time.deltaTime
). Garantiza que el estado actual se actualice correctamente en cada frame.
Comprobación de DeathState
if (stateManager.GetCurrentState() is DeathState) return;
Esta línea verifica si el estado actual es DeathState
.
Si el enemigo está en el DeathState
, el método retorna inmediatamente, evitando cualquier actualización adicional para mirar al jugador u otros comportamientos.
Orientación hacia el Jugador
Las siguientes líneas aseguran que el enemigo siempre mire hacia el jugador:
scale.x = transform.position.x > player.position.x ? -1 : 1;
transform.localScale = scale;
scale.x = transform.position.x > player.position.x ? -1 : 1;
Esta línea comprueba si la posición x del enemigo es mayor que la posición x del jugador:
- Si es verdadero,
scale.x
se establece en-1
, haciendo que el enemigo mire a la izquierda; - Si es falso,
scale.x
se establece en1
, haciendo que el enemigo mire a la derecha.
transform.localScale = scale;
Esta línea aplica la escala actualizada al transform del enemigo, asegurando que mire en la dirección correcta.
Por qué lo hicimos de esta manera
Manejo del estado de muerte
Agregar la comprobación para DeathState
asegura que el enemigo no continúe actualizando su comportamiento u orientación después de haber muerto. Esto es crucial para mantener la lógica del juego y evitar comportamientos inesperados después de que el enemigo debería estar inactivo.
Lógica centralizada
Al mover la lógica de orientación hacia el jugador al método Update
, centralizamos este comportamiento, reduciendo la redundancia y mejorando el mantenimiento del código.
Esto garantiza que el enemigo siempre mire hacia el jugador sin importar el estado actual, lo que simplifica el código específico de cada estado.
Explicación del manejo de la muerte del enemigo
public class DeathState : State
{
Animator animator;
public DeathState(Animator animator)
{
this.animator = animator;
}
public override void StartState()
{
isStateFinished = false;
animator.SetBool("death", true);
}
public override void EndState()
{
}
}
La clase DeathState
es un estado específico que gestiona el comportamiento del enemigo cuando muere.
Por qué lo hicimos de esta manera
Manejo del comportamiento de muerte
La clase DeathState
gestiona específicamente el comportamiento del enemigo cuando muere, asegurando que la animación de muerte se reproduzca y que el estado se marque como finalizado.
Integración de animaciones
El uso de parámetros del animador garantiza que la animación de muerte esté correctamente sincronizada con el cambio de estado, proporcionando una experiencia fluida y realista.
Generación de partículas al morir el enemigo
if (health <= 0)
{
stateManager.ChangeState(deathState);
var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity);
deathParticle.Play();
Destroy(deathParticle.gameObject, 5);
}
Este código muestra cómo el enemigo gestiona su muerte cuando su salud llega a cero. Cambia al DeathState
y reproduce un efecto de partículas de muerte.
Desglose del Código
Verificación de Salud
if (health <= 0)
Esta condición verifica si la salud del enemigo ha caído a cero o menos.
Transición a DeathState
stateManager.ChangeState(deathState)
Esta línea realiza la transición del enemigo al DeathState
utilizando el StateManager
.
Instanciación de Partículas de Muerte
var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity)
Esta línea crea una instancia del efecto de partículas de muerte en la posición del enemigo.
deathParticles
es un prefab que contiene el sistema de partículas para el efecto de muerte.
Quaternion.identity
asegura que las partículas no tengan rotación.
Reproducción de Partículas de Muerte
deathParticle.Play()
Esta línea reproduce el efecto de partículas instanciado.
Destrucción de Partículas de Muerte
Destroy(deathParticle.gameObject, 5)
Esta línea programa la destrucción del objeto GameObject
del efecto de partículas después de 5 segundos, asegurando que no permanezca indefinidamente en el juego.
Por Qué Lo Hicimos Así
Gestión de Estados:
La transición a DeathState
asegura que el comportamiento de muerte del enemigo se gestione correctamente y que se ejecute cualquier lógica específica para el estado de muerte.
Efectos Visuales: Reproducir un efecto de partículas de muerte proporciona retroalimentación visual al jugador, mejorando la experiencia de juego.
¡Gracias por tus comentarios!