Contenido del Curso
Juego de Lucha en Unity
Juego de Lucha en Unity
Estado de Furia
public class RageState : State
{
Animator animator;
System.Action addHealth;
System.Action changingAttackDmg;
public RageState(Animator animator, System.Action addHealth, System.Action changeAttack)
{
this.animator = animator;
this.addHealth = addHealth;
changingAttackDmg = changeAttack;
}
public override void StartState()
{
animator.SetBool("rage", true);
isStateFinished = false;
changingAttackDmg(); // add the enemy dmg after raging
}
public override void UpdateState(float deltaTime)
{
addHealth();
}
public override void EndState()
{
animator.SetBool("rage", false);
}
}
Explicación de la clase RageState
La clase RageState
es un estado específico que gestiona el comportamiento del enemigo cuando entra en modo furia. Esta clase hereda de la clase State
e incluye métodos para iniciar, actualizar y finalizar el estado de furia. También incluye acciones para añadir salud y cambiar el daño de ataque cuando el enemigo está en modo furia.
Definición de la clase y variables miembro
Definición de la clase;
public class RageState : State
Esta clase hereda de la clase State
, lo que significa que debe implementar los métodos abstractos definidos en State
.
Variables miembro:
Animator animator;
Controla las animaciones.
System.Action addHealth;
Acción para añadir salud al enemigo.
System.Action changingAttackDmg;
Acción para cambiar el daño de ataque del enemigo.
Constructor
El constructor inicializa el RageState
con los componentes necesarios: un Animator
para las animaciones y dos acciones para agregar salud y cambiar el daño 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 furia configurando el parámetro booleano "rage" en el animator a true
, y llama a changingAttackDmg
para aumentar el daño del enemigo.
Método UpdateState
Este método se llama en cada frame y ejecuta addHealth
para añadir salud continuamente al enemigo mientras está en el estado de furia.
Método EndState
Este método detiene la animación de furia estableciendo el parámetro booleano "rage" en el animador a false
.
Razón de Esta Implementación
Comportamiento Mejorado del Enemigo;
El RageState
mejora el comportamiento del enemigo al aumentar su daño de ataque y añadir salud de forma continua, lo que lo hace más desafiante para el jugador;
El uso de acciones (System.Action
) permite modificaciones flexibles y modulares en los atributos del enemigo.
Jugabilidad Dinámica y Atractiva:
Al hacer que el enemigo entre en un estado de furia, la jugabilidad se vuelve más dinámica y atractiva, ya que el jugador debe adaptarse a un enemigo más poderoso y resistente.
Funcionamiento en Contexto
Entrada en Estado de Furia: Cuando el enemigo entra en el RageState
, se llama al método StartState
, lo que activa la animación de furia y aumenta el daño de ataque del enemigo.
Durante la Furia: El método UpdateState
se llama en cada frame. Añade salud continuamente al enemigo, dificultando que el jugador lo derrote.
Salida del Estado de Furia: Cuando el enemigo sale del RageState
, se llama al método EndState
, deteniendo la animación de furia.
Al estructurar el RageState
de esta manera, aseguramos que el enemigo pueda volverse significativamente más poderoso y resistente, proporcionando un mayor desafío para el jugador y mejorando la experiencia general de juego.
Inicializar el Estado de Furia
rage = new RageState(animator, () => { health += 10f * Time.deltaTime; }, () => { attack1.ChangeAttackDmg(15); attack2.ChangeAttackDmg(25); });
Explicación
Inicialización de RageState:
rage = new RageState(animator, (...) => {...}, (...) => {...});
Crea una nueva instancia de RageState
llamada rage
;
Animator:
animator
: Pasa el animador para controlar las animaciones;
Incrementar Salud:
() => { health += 10f * Time.deltaTime; }
Una función lambda que incrementa la salud en 10
unidades por segundo;
Cambiar Daño de Ataque:
() => { attack1.ChangeAttackDmg(15); attack2.ChangeAttackDmg(25); }
Una función lambda que cambia el daño de ataque de attack1
a 15
y de attack2
a 25
.
Transición a Furia
rageTransition = new Transition(() =>
{
if (health <= 40f && haveRaged == false)
{
haveRaged = true;
return true;
}
return false;
}, new StatePourcentage(rage, 100f));
La rageTransition
es una transición que mueve al enemigo a un RageState
cuando se cumplen ciertas condiciones. Esta transición está diseñada para que el enemigo sea más formidable cuando su salud cae por debajo de un umbral específico y aún no ha entrado en el estado de furia.
Definición de la Transición
Condición:
La transición verifica si la salud del enemigo es menor o igual a 40 y si el enemigo aún no ha entrado en el estado de furia (haveRaged
es false
).
Si ambas condiciones se cumplen, establece haveRaged
en true
para asegurar que el enemigo solo entre en el estado de furia una vez y retorna true
para activar la transición.
State Pourcentage:
La transición utiliza new StatePourcentage(rage, 100f)
para indicar que, cuando se cumple la condición, el enemigo pasará al RageState
con un 100% de probabilidad.
Razón de Esta Implementación
Activación de Comportamiento Potente: La rageTransition
permite que el enemigo se vuelva más poderoso cuando su salud está críticamente baja, aumentando el desafío para el jugador. Esta transición garantiza que el enemigo solo entre en el estado de furia una vez, evitando transiciones repetidas a dicho estado.
Jugabilidad Dinámica y Desafiante: Al introducir el estado de furia bajo condiciones de salud crítica, la jugabilidad se vuelve más dinámica y desafiante, requiriendo que el jugador adapte su estrategia.
Cómo funciona en contexto
Verificación de salud: Durante el juego, a medida que el enemigo recibe daño, se monitorea su salud. Cuando la salud del enemigo cae a 40 o menos y aún no ha entrado en furia, se cumple la condición rageTransition
.
Activación del estado de furia: Una vez que se cumple la condición, haveRaged
se establece en true
y se activa la transición al RageState
con una probabilidad del 100%.
Ingreso al estado de furia: Se inicia el RageState
, aumentando el daño de ataque del enemigo y añadiendo salud de forma continua, lo que hace que el enemigo sea significativamente más difícil de derrotar.
¡Gracias por tus comentarios!