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

bookEstado de Investida

Animator Controller

public class AnimatorController : MonoBehaviour
{
    [SerializeField] Enemy enemy;

    public void FinishMovement()
    {
        enemy.FinishMovement();
    }

    public void EndCurrentState()
    {
        enemy.EndCurrentState();
    }
}

Finalidade do AnimatorController

A classe AnimatorController é projetada para gerenciar e acionar comportamentos do inimigo por meio de eventos do animador. Isso permite uma integração fluida das transições de animação e mudanças de estado, garantindo que o comportamento do inimigo corresponda às suas animações.

Definição da Classe e Variável Membro

Definição da Classe: public class AnimatorController : MonoBehaviour define uma classe que herda de MonoBehaviour, permitindo que seja anexada a um GameObject no Unity.

Variável Membro: [SerializeField] Enemy enemy; é um campo serializado que permite vincular um objeto Enemy ao AnimatorController diretamente pelo Inspector do Unity. A variável enemy é uma referência ao script do inimigo, que contém funções responsáveis por controlar o comportamento do inimigo.

Métodos

Método FinishMovement: public void FinishMovement(): Este método chama enemy.FinishMovement(). Ele foi projetado para ser chamado por um evento do animador, sinalizando o fim de uma animação de movimento.

Método EndCurrentState: public void EndCurrentState(): Este método chama enemy.EndCurrentState(). Ele deve ser chamado por um evento do animador para sinalizar o fim do estado atual.

Integração com Eventos do Animador

Eventos do Animador: Eventos do animador são eventos especiais que podem ser inseridos nas linhas do tempo de animação dentro do Animator do Unity. Esses eventos podem chamar funções em scripts anexados ao mesmo GameObject ou em seus filhos.

Como Funciona: Durante uma animação, como uma animação de corrida ou ataque, pontos específicos na linha do tempo podem acionar 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);
    }
}

Explicação da Classe DashState

A classe DashState é um estado específico que gerencia o comportamento de dash do inimigo. Esta classe herda da classe State e inclui métodos para iniciar, atualizar e finalizar o estado de dash, além de lidar com o evento de término do movimento.

Construtor

O construtor inicializa o DashState com os componentes necessários: um Rigidbody2D para movimentação, um Animator, um Transform para o jogador e uma velocidade de dash. Ele define a escala inicial e inicializa o vetor de velocidade.

Método StartState

Este método define isStateFinished como false e aciona a animação de dash ao definir o parâmetro booleano "dash" no animator como true. Também reinicia o sinalizador stopDashing para false.

Método FinishMovement

Este método define stopDashing como true, o que interrompe a ação de dash no método UpdateState.

Método UpdateState

Este método atualiza a posição e orientação do inimigo com base na posição do jogador. Se stopDashing for true, o método retorna imediatamente, interrompendo atualizações adicionais. Ele ajusta a escala do inimigo para que fique voltado para o jogador, calcula a velocidade com base na velocidade definida e aplica essa velocidade ao Rigidbody2D.

Método EndState

Este método interrompe a animação de dash definindo o parâmetro booleano "dash" no animator como false.

Por que Fizemos Desta Forma

A flag stopDashing permite um controle preciso sobre quando a corrida deve parar, tornando o comportamento mais responsivo aos eventos do jogo. Ao atualizar continuamente a posição e direção do inimigo, o DashState garante que o inimigo possa correr rapidamente e com precisão em direção ao jogador. O uso de parâmetros do animador assegura que as animações do inimigo estejam corretamente sincronizadas com seus movimentos, proporcionando uma experiência suave e realista.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 6

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 Investida

Deslize para mostrar o menu

Animator Controller

public class AnimatorController : MonoBehaviour
{
    [SerializeField] Enemy enemy;

    public void FinishMovement()
    {
        enemy.FinishMovement();
    }

    public void EndCurrentState()
    {
        enemy.EndCurrentState();
    }
}

Finalidade do AnimatorController

A classe AnimatorController é projetada para gerenciar e acionar comportamentos do inimigo por meio de eventos do animador. Isso permite uma integração fluida das transições de animação e mudanças de estado, garantindo que o comportamento do inimigo corresponda às suas animações.

Definição da Classe e Variável Membro

Definição da Classe: public class AnimatorController : MonoBehaviour define uma classe que herda de MonoBehaviour, permitindo que seja anexada a um GameObject no Unity.

Variável Membro: [SerializeField] Enemy enemy; é um campo serializado que permite vincular um objeto Enemy ao AnimatorController diretamente pelo Inspector do Unity. A variável enemy é uma referência ao script do inimigo, que contém funções responsáveis por controlar o comportamento do inimigo.

Métodos

Método FinishMovement: public void FinishMovement(): Este método chama enemy.FinishMovement(). Ele foi projetado para ser chamado por um evento do animador, sinalizando o fim de uma animação de movimento.

Método EndCurrentState: public void EndCurrentState(): Este método chama enemy.EndCurrentState(). Ele deve ser chamado por um evento do animador para sinalizar o fim do estado atual.

Integração com Eventos do Animador

Eventos do Animador: Eventos do animador são eventos especiais que podem ser inseridos nas linhas do tempo de animação dentro do Animator do Unity. Esses eventos podem chamar funções em scripts anexados ao mesmo GameObject ou em seus filhos.

Como Funciona: Durante uma animação, como uma animação de corrida ou ataque, pontos específicos na linha do tempo podem acionar 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);
    }
}

Explicação da Classe DashState

A classe DashState é um estado específico que gerencia o comportamento de dash do inimigo. Esta classe herda da classe State e inclui métodos para iniciar, atualizar e finalizar o estado de dash, além de lidar com o evento de término do movimento.

Construtor

O construtor inicializa o DashState com os componentes necessários: um Rigidbody2D para movimentação, um Animator, um Transform para o jogador e uma velocidade de dash. Ele define a escala inicial e inicializa o vetor de velocidade.

Método StartState

Este método define isStateFinished como false e aciona a animação de dash ao definir o parâmetro booleano "dash" no animator como true. Também reinicia o sinalizador stopDashing para false.

Método FinishMovement

Este método define stopDashing como true, o que interrompe a ação de dash no método UpdateState.

Método UpdateState

Este método atualiza a posição e orientação do inimigo com base na posição do jogador. Se stopDashing for true, o método retorna imediatamente, interrompendo atualizações adicionais. Ele ajusta a escala do inimigo para que fique voltado para o jogador, calcula a velocidade com base na velocidade definida e aplica essa velocidade ao Rigidbody2D.

Método EndState

Este método interrompe a animação de dash definindo o parâmetro booleano "dash" no animator como false.

Por que Fizemos Desta Forma

A flag stopDashing permite um controle preciso sobre quando a corrida deve parar, tornando o comportamento mais responsivo aos eventos do jogo. Ao atualizar continuamente a posição e direção do inimigo, o DashState garante que o inimigo possa correr rapidamente e com precisão em direção ao jogador. O uso de parâmetros do animador assegura que as animações do inimigo estejam corretamente sincronizadas com seus movimentos, proporcionando uma experiência suave e realista.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

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