Conteúdo do Curso
Jogo de Luta no Unity
Jogo de Luta no Unity
Criar 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.
Obrigado pelo seu feedback!