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

bookEstado de Ataque

Explicação da Classe AttackState

A classe AttackState é um estado específico que lida com o comportamento de ataque do inimigo. Esta classe herda da classe State e inclui métodos para iniciar, atualizar e finalizar o estado de ataque, bem como lidar com a ação de ataque.

Definição da Classe e Variáveis Membro

Definição da Classe:

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

Variáveis Membro:

string attackStateName; O nome do estado de ataque usado no animador. bool isAttacking; Um indicador para mostrar se o inimigo está atualmente atacando. Animator animator; Controla as animações. Transform transform; O transform do inimigo, usado para posicionamento e raycasting. float range; O alcance do ataque. int damage; O dano causado pelo ataque. LayerMask playerLayer; A máscara de camada usada para identificar o jogador.

Construtor

O construtor inicializa o AttackState com os componentes necessários: um Transform para posicionamento, um Animator para animações, uma máscara de camada para identificar o jogador, o nome do estado de ataque, o valor do dano e o alcance do ataque. Ele define esses valores para as variáveis membro correspondentes.

Método StartState

Este método define isStateFinished como false, aciona a animação de ataque definindo o parâmetro booleano apropriado no animador como true, e redefine o indicador isAttacking para false.

Método EndState

Este método interrompe a animação de ataque definindo o parâmetro booleano apropriado no animador como false.

Método UpdateState

Este método é chamado a cada frame e aciona o método Attack para realizar a ação de ataque.

Método StartAction

Este método define isAttacking como true, indicando que a ação de ataque foi iniciada.

Método FinishMovement

Este método define isAttacking como false, indicando que a ação de ataque foi encerrada.

Método Attack

Este método realiza a ação de ataque. Se isAttacking for true, ele lança um raio na direção em que o inimigo está voltado. Se o raio atingir um objeto na playerLayer, ele chama o método GetAttacked no objeto atingido, causando dano e encerrando a ação de ataque.

Por Que Fizemos Assim

  • Controle Sobre o Comportamento de Ataque: A flag isAttacking permite um controle preciso sobre quando o ataque deve ocorrer, tornando o comportamento mais responsivo aos eventos do jogo;
  • Execução Dinâmica de Ataque: Ao atualizar continuamente o estado de ataque do inimigo, o AttackState garante que o inimigo possa atacar o jogador de forma precisa e dinâmica;
  • Integração de Animação: Usar parâmetros do animador garante que as animações do inimigo estejam corretamente sincronizadas com seus ataques, proporcionando uma experiência suave e realista.

Como Funciona no Contexto

Entrando no Estado de Ataque: Quando o inimigo entra no AttackState, o método StartState é chamado, acionando a animação de ataque e reiniciando a flag isAttacking.

Durante o Ataque: O método UpdateState é chamado a cada frame. Ele aciona o método Attack para verificar se um ataque deve ocorrer.

Iniciando o Ataque: O método StartAction define isAttacking como true, permitindo que o método Attack realize a ação de ataque.

Realizando o Ataque: O método Attack lança um raio para detectar o jogador e causa dano se o jogador for atingido.

Finalizando o Ataque: O método FinishMovement define isAttacking como false, interrompendo a ação de ataque.

Saindo do Estado de Ataque: Quando o inimigo sai do AttackState, o método EndState é chamado, interrompendo a animação de ataque. Estruturando o AttackState desta forma, garantimos que o inimigo possa realizar ataques responsivos e dinâmicos no jogador, com transições suaves entre animações e estados.

Transição Fechada:

closeTransition: Esta transição verifica se o jogador está dentro de uma certa distância horizontal (ThresholdDistance) do inimigo. Se a condição for atendida, ela transita aleatoriamente para attack1 ou attack2 com igual probabilidade (50% cada);

Exemplo de Código:

Adicionando closeTransition ao Estado Idle:

stateManager.AddStateTransition(idle, closeTransition); Esta linha adiciona o closeTransition ao estado idle, permitindo que a máquina de estados verifique essa condição quando o inimigo está no estado ocioso.

Por Que Fizemos Assim

O sistema de transição permite que o inimigo mude para um estado de ataque com base na proximidade do jogador, aumentando o engajamento. A abordagem probabilística para escolher entre diferentes ataques adiciona imprevisibilidade, aumentando o desafio e o interesse do jogo.

Como Funciona no Contexto

Estado Idle: Enquanto o inimigo está no estado idle, ele verifica constantemente se o jogador está dentro do ThresholdDistance usando o closeTransition. Se o jogador estiver perto o suficiente, o closeTransition é acionado, e o inimigo transita para attack1 ou attack2.

Estados de Ataque:

Uma vez em attack1 ou attack2, o inimigo realiza o ataque. Após o término do ataque, o toIdleTransition existente faz o inimigo voltar ao estado idle, pronto para verificar novamente a condição do closeTransition.

Ao adicionar este closeTransition, garantimos que o inimigo possa engajar o jogador de forma mais dinâmica e imprevisível quando o jogador estiver em uma faixa próxima. Isso melhora a jogabilidade tornando o comportamento do inimigo mais responsivo e envolvente.

Qual método é responsável por detectar e aplicar dano ao jogador dentro do alcance na classe `AttackState`?

Qual método é responsável por detectar e aplicar dano ao jogador dentro do alcance na classe AttackState?

Selecione a resposta correta

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

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