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

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 8

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 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.

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

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