Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Estado de Fúria | Comportamento do Inimigo
Jogo de Luta no Unity

bookEstado de Fúria

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);
    }
}

Explicação da Classe RageState

A classe RageState é um estado específico que gerencia o comportamento do inimigo quando ele entra no modo de fúria. Esta classe herda da classe State e inclui métodos para iniciar, atualizar e finalizar o estado de fúria. Também inclui ações para adicionar vida e alterar o dano de ataque enquanto o inimigo está em modo de fúria.

Definição da Classe e Variáveis Membro

Definição da Classe;

public class RageState : State Esta classe herda da classe State, o que significa que deve implementar os métodos abstratos definidos em State.

Variáveis Membro:

Animator animator; Controla as animações.
System.Action addHealth; Ação para adicionar vida ao inimigo.
System.Action changingAttackDmg; Ação para alterar o dano de ataque do inimigo.

Construtor

O construtor inicializa o RageState com os componentes necessários: um Animator para animações e duas ações para adicionar vida e alterar o dano de ataque. Ele atribui esses valores às variáveis membro correspondentes.

Método StartState

Este método define isStateFinished como false, aciona a animação de fúria ao definir o parâmetro booleano "rage" no animator como true e chama changingAttackDmg para aumentar o dano do inimigo.

Método UpdateState

Este método é chamado a cada frame e chama addHealth para adicionar continuamente vida ao inimigo enquanto estiver no estado de fúria.

Método EndState

Este método interrompe a animação de fúria ao definir o parâmetro booleano "rage" no animator como false.

Por Que Fizemos Desta Forma

Comportamento Aprimorado do Inimigo;

O RageState aprimora o comportamento do inimigo ao aumentar o dano de ataque e adicionar vida continuamente, tornando-o mais desafiador para o jogador; O uso de ações (System.Action) permite modificações flexíveis e modulares nos atributos do inimigo.

Jogabilidade Dinâmica e Envolvente:

Ao fazer o inimigo entrar em um estado de fúria, a jogabilidade se torna mais dinâmica e envolvente, pois o jogador precisa se adaptar a um inimigo mais forte e resistente.

Como Funciona no Contexto

Entrada no Estado de Fúria: Quando o inimigo entra no RageState, o método StartState é chamado, ativando a animação de fúria e aumentando o dano de ataque do inimigo.

Durante a Fúria: O método UpdateState é chamado a cada frame. Ele adiciona vida continuamente ao inimigo, tornando mais difícil para o jogador derrotá-lo.

Saída do Estado de Fúria: Quando o inimigo sai do RageState, o método EndState é chamado, interrompendo a animação de fúria.

Ao estruturar o RageState desta forma, garantimos que o inimigo possa se tornar significativamente mais forte e resistente, proporcionando um desafio maior ao jogador e aprimorando a experiência geral de jogo.

Inicializar Estado de Fúria

rage = new RageState(animator, () => { health += 10f * Time.deltaTime; }, () => { attack1.ChangeAttackDmg(15); attack2.ChangeAttackDmg(25); });

Explicação

Inicialização do RageState:

rage = new RageState(animator, (...) => {...}, (...) => {...}); Cria uma nova instância de RageState chamada rage;

Animator:

animator: Passa o animator para controlar as animações;

Aumento de Vida:

() => { health += 10f * Time.deltaTime; } Função lambda que aumenta a vida em 10 unidades por segundo;

Alteração do Dano de Ataque:

() => { attack1.ChangeAttackDmg(15); attack2.ChangeAttackDmg(25); } Função lambda que altera o dano de ataque de attack1 para 15 e de attack2 para 25.

Transição para Fúria

rageTransition = new Transition(() =>
{
    if (health <= 40f && haveRaged == false)
    {
        haveRaged = true;
        return true;
    }
    return false;
}, new StatePourcentage(rage, 100f));

A rageTransition é uma transição que move o inimigo para um RageState quando certas condições são atendidas. Essa transição foi projetada para tornar o inimigo mais formidável quando sua vida cai abaixo de um determinado limite e ele ainda não entrou no estado de fúria.

Definição da Transição

Condição:

A transição verifica se a vida do inimigo é menor ou igual a 40 e se o inimigo ainda não entrou no estado de fúria (haveRaged está false). Se ambas as condições forem atendidas, define haveRaged como true para garantir que o inimigo entre no estado de fúria apenas uma vez e retorna true para acionar a transição.

State Pourcentage:

A transição utiliza new StatePourcentage(rage, 100f) para indicar que, quando a condição for atendida, o inimigo irá transitar para o RageState com 100% de probabilidade.

Por Que Fizemos Desta Forma

Ativação de Comportamento Poderoso: O rageTransition permite que o inimigo se torne mais poderoso quando sua vida está criticamente baixa, aumentando o desafio para o jogador. Essa transição garante que o inimigo entre no estado de fúria apenas uma vez, evitando transições repetidas para esse estado.

Jogabilidade Dinâmica e Desafiadora: Ao introduzir o estado de fúria em condições críticas de vida, a jogabilidade se torna mais dinâmica e desafiadora, exigindo que o jogador adapte sua estratégia.

Como Funciona no Contexto

Verificação de Vida: Durante o jogo, à medida que o inimigo recebe dano, sua vida é monitorada. Quando a vida do inimigo cai para 40 ou menos e ele ainda não entrou em fúria, a condição rageTransition é atendida.

Ativação do Estado de Fúria: Assim que a condição é atendida, haveRaged é definido como true, e a transição para o RageState é acionada com 100% de probabilidade.

Entrada no Estado de Fúria: O RageState é iniciado, aumentando o dano de ataque do inimigo e adicionando vida continuamente, tornando o inimigo significativamente mais difícil de derrotar.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 8

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 3.33

bookEstado de Fúria

Deslize para mostrar o menu

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);
    }
}

Explicação da Classe RageState

A classe RageState é um estado específico que gerencia o comportamento do inimigo quando ele entra no modo de fúria. Esta classe herda da classe State e inclui métodos para iniciar, atualizar e finalizar o estado de fúria. Também inclui ações para adicionar vida e alterar o dano de ataque enquanto o inimigo está em modo de fúria.

Definição da Classe e Variáveis Membro

Definição da Classe;

public class RageState : State Esta classe herda da classe State, o que significa que deve implementar os métodos abstratos definidos em State.

Variáveis Membro:

Animator animator; Controla as animações.
System.Action addHealth; Ação para adicionar vida ao inimigo.
System.Action changingAttackDmg; Ação para alterar o dano de ataque do inimigo.

Construtor

O construtor inicializa o RageState com os componentes necessários: um Animator para animações e duas ações para adicionar vida e alterar o dano de ataque. Ele atribui esses valores às variáveis membro correspondentes.

Método StartState

Este método define isStateFinished como false, aciona a animação de fúria ao definir o parâmetro booleano "rage" no animator como true e chama changingAttackDmg para aumentar o dano do inimigo.

Método UpdateState

Este método é chamado a cada frame e chama addHealth para adicionar continuamente vida ao inimigo enquanto estiver no estado de fúria.

Método EndState

Este método interrompe a animação de fúria ao definir o parâmetro booleano "rage" no animator como false.

Por Que Fizemos Desta Forma

Comportamento Aprimorado do Inimigo;

O RageState aprimora o comportamento do inimigo ao aumentar o dano de ataque e adicionar vida continuamente, tornando-o mais desafiador para o jogador; O uso de ações (System.Action) permite modificações flexíveis e modulares nos atributos do inimigo.

Jogabilidade Dinâmica e Envolvente:

Ao fazer o inimigo entrar em um estado de fúria, a jogabilidade se torna mais dinâmica e envolvente, pois o jogador precisa se adaptar a um inimigo mais forte e resistente.

Como Funciona no Contexto

Entrada no Estado de Fúria: Quando o inimigo entra no RageState, o método StartState é chamado, ativando a animação de fúria e aumentando o dano de ataque do inimigo.

Durante a Fúria: O método UpdateState é chamado a cada frame. Ele adiciona vida continuamente ao inimigo, tornando mais difícil para o jogador derrotá-lo.

Saída do Estado de Fúria: Quando o inimigo sai do RageState, o método EndState é chamado, interrompendo a animação de fúria.

Ao estruturar o RageState desta forma, garantimos que o inimigo possa se tornar significativamente mais forte e resistente, proporcionando um desafio maior ao jogador e aprimorando a experiência geral de jogo.

Inicializar Estado de Fúria

rage = new RageState(animator, () => { health += 10f * Time.deltaTime; }, () => { attack1.ChangeAttackDmg(15); attack2.ChangeAttackDmg(25); });

Explicação

Inicialização do RageState:

rage = new RageState(animator, (...) => {...}, (...) => {...}); Cria uma nova instância de RageState chamada rage;

Animator:

animator: Passa o animator para controlar as animações;

Aumento de Vida:

() => { health += 10f * Time.deltaTime; } Função lambda que aumenta a vida em 10 unidades por segundo;

Alteração do Dano de Ataque:

() => { attack1.ChangeAttackDmg(15); attack2.ChangeAttackDmg(25); } Função lambda que altera o dano de ataque de attack1 para 15 e de attack2 para 25.

Transição para Fúria

rageTransition = new Transition(() =>
{
    if (health <= 40f && haveRaged == false)
    {
        haveRaged = true;
        return true;
    }
    return false;
}, new StatePourcentage(rage, 100f));

A rageTransition é uma transição que move o inimigo para um RageState quando certas condições são atendidas. Essa transição foi projetada para tornar o inimigo mais formidável quando sua vida cai abaixo de um determinado limite e ele ainda não entrou no estado de fúria.

Definição da Transição

Condição:

A transição verifica se a vida do inimigo é menor ou igual a 40 e se o inimigo ainda não entrou no estado de fúria (haveRaged está false). Se ambas as condições forem atendidas, define haveRaged como true para garantir que o inimigo entre no estado de fúria apenas uma vez e retorna true para acionar a transição.

State Pourcentage:

A transição utiliza new StatePourcentage(rage, 100f) para indicar que, quando a condição for atendida, o inimigo irá transitar para o RageState com 100% de probabilidade.

Por Que Fizemos Desta Forma

Ativação de Comportamento Poderoso: O rageTransition permite que o inimigo se torne mais poderoso quando sua vida está criticamente baixa, aumentando o desafio para o jogador. Essa transição garante que o inimigo entre no estado de fúria apenas uma vez, evitando transições repetidas para esse estado.

Jogabilidade Dinâmica e Desafiadora: Ao introduzir o estado de fúria em condições críticas de vida, a jogabilidade se torna mais dinâmica e desafiadora, exigindo que o jogador adapte sua estratégia.

Como Funciona no Contexto

Verificação de Vida: Durante o jogo, à medida que o inimigo recebe dano, sua vida é monitorada. Quando a vida do inimigo cai para 40 ou menos e ele ainda não entrou em fúria, a condição rageTransition é atendida.

Ativação do Estado de Fúria: Assim que a condição é atendida, haveRaged é definido como true, e a transição para o RageState é acionada com 100% de probabilidade.

Entrada no Estado de Fúria: O RageState é iniciado, aumentando o dano de ataque do inimigo e adicionando vida continuamente, tornando o inimigo significativamente mais difícil de derrotar.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 8
some-alt