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

Conteúdo do Curso

Jogo de Luta no Unity

Jogo de Luta no Unity

1. Sistema de Animação do Unity
2. Comportamento do Jogador
3. Comportamento do Inimigo
4. Melhore o Jogo
5. Melhore o Jogo Flappy Bird

bookCriar Gerenciador de Estado

Estado:

Métodos Abstratos:

public abstract void StartState(); public abstract void EndState(); são métodos abstratos. Um método abstrato não tem um corpo (implementação) aqui e deve ser implementado por qualquer classe não abstrata que herde desta classe State.

Método Virtual:

public virtual void UpdateState() {} é um método virtual. Um método virtual tem uma implementação (neste caso, um corpo vazio {}), mas pode ser sobrescrito por classes derivadas se precisarem de um comportamento diferente.

Como Funciona para Nosso Inimigo

Herança de Estado:

A classe State será herdada por outros estados específicos. Por exemplo, podemos ter classes como IdleState, AttackState e PatrolState que herdam de State. Cada um desses estados implementará suas próprias versões de StartState(), UpdateState(), e EndState().

Comportamento do Inimigo:

O comportamento do inimigo é gerenciado através de estados, com StartState() inicializando o estado, UpdateState() atualizando o comportamento durante o estado, e EndState() limpando após o término do estado.

Uso de Classe Abstrata: Fazer State uma classe abstrata garante que todos os estados específicos implementem os métodos necessários, organizando o comportamento do inimigo e simplificando o gerenciamento de estados sem alterar o script do inimigo.

Gerenciador de Estado:

Explicação

O construtor public StateManager(State startingState) inicializa o StateManager com um estado inicial. Ele define currentState como startingState e chama currentState.StartState() para inicializá-lo.

O método ChangeState, public void ChangeState(State newState), altera o estado do inimigo. Ele chama currentState.EndState() para limpar o estado atual, define currentState para o novo estado e então chama currentState.StartState() para inicializar o novo estado.

O método UpdateStates, public void UpdateStates(), atualiza o estado atual chamando currentState.UpdateState() para executar as ações associadas a esse estado.

Como Funciona para Nosso Inimigo

Quando criamos um StateManager para nosso inimigo, o construtor inicializa o estado inicial. Quando o inimigo precisa mudar seu comportamento, o método ChangeState é chamado, encerrando o estado atual com EndState(), definindo o novo estado e inicializando-o com StartState(). Durante o jogo, o método UpdateStates é chamado repetidamente para executar as ações do estado atual via UpdateState().

Fluxo de Trabalho Exemplo:

O inimigo começa em um IdleState, com o StateManager criado e IdleState.StartState() chamado para configurar o comportamento de inatividade. Quando o inimigo detecta o jogador, ChangeState(new AttackState()) é chamado, encerrando o comportamento de inatividade com IdleState.EndState(). O estado atual é então definido para AttackState, e AttackState.StartState() inicia o comportamento de ataque. A cada quadro, UpdateStates() é chamado, e se o estado atual for AttackState, AttackState.UpdateState() lida com as ações de ataque.

Usando a classe StateManager, podemos gerenciar e alternar facilmente entre diferentes comportamentos do nosso inimigo de maneira organizada.

Estado de Inatividade

Explicação

O construtor public IdleState(Animator animator) recebe um objeto Animator como parâmetro e o atribui à variável animator da classe. O método StartState, public override void StartState(), define o parâmetro booleano "idle" no animador como verdadeiro, acionando a animação de inatividade. O método EndState, public override void EndState(), define o parâmetro "idle" como falso, interrompendo a animação de inatividade.

Como Funciona para o Nosso Inimigo

Quando o inimigo entra no IdleState, o método StartState() define o parâmetro "idle" no animador como verdadeiro, iniciando a animação de inatividade, fazendo o inimigo parecer inativo. Quando o inimigo sai do IdleState, o método EndState() define o parâmetro "idle" como falso, parando a animação de inatividade e preparando o inimigo para transitar para outro estado, como mover-se ou atacar.

Fluxo de Trabalho Exemplo

O StateManager define o estado do inimigo como IdleState, chamando IdleState.StartState() para definir o parâmetro "idle" do animador como verdadeiro, iniciando a animação de inatividade. Ao mudar o comportamento do inimigo, o StateManager chama IdleState.EndState(), definindo o parâmetro "idle" como falso e parando a animação de inatividade. O StateManager então transita o inimigo para um novo estado, como AttackState ou PatrolState.

Ao usar a classe IdleState, podemos garantir que nosso inimigo possa entrar e sair do comportamento de inatividade suavemente, tornando-o mais dinâmico e realista. Esta estrutura também facilita a adição ou modificação do comportamento de inatividade do inimigo sem afetar outras partes do código do inimigo.

Qual método é chamado para atualizar o estado atual na classe `StateManager`?

Qual método é chamado para atualizar o estado atual na classe StateManager?

Selecione a resposta correta

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

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