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

book
Estado de Ataque

csharp

Explicação da Classe AttackState

A classe AttackState é um estado específico que gerencia 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, além de lidar com a ação de atacar.

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; Nome do estado de ataque utilizado no animator. bool isAttacking; Indicador para verificar se o inimigo está atacando no momento. Animator animator; Controla as animações. Transform transform; Transform do inimigo, utilizado para posicionamento e raycasting. float range; Alcance do ataque. int damage; Dano causado pelo ataque. LayerMask playerLayer; Máscara de camada utilizada 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 layer mask para identificar o jogador, o nome do estado de ataque, o valor de dano e o alcance do ataque. Esses valores são atribuídos às variáveis membro correspondentes.

Método StartState

Este método define isStateFinished como false, aciona a animação de ataque ao definir o parâmetro booleano apropriado no animator como true e reinicia a flag isAttacking para false.

Método EndState

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

Método UpdateState

Este método é chamado a cada frame e aciona o método Attack para executar 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 finalizada.

Método de Ataque

Este método executa 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 Desta Forma

  • Controle Sobre o Comportamento de Ataque: A flag isAttacking permite controle preciso sobre quando o ataque deve ocorrer, tornando o comportamento mais responsivo aos eventos do jogo;

  • Execução Dinâmica do 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 com Animação: O uso de parâmetros do animador garante que as animações do inimigo estejam corretamente sincronizadas com seus ataques, proporcionando uma experiência fluida e realista.

Funcionamento no Contexto

Entrada 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.

Início do Ataque: O método StartAction define isAttacking como true, permitindo que o método Attack execute a ação de ataque.

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

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

Saída 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 ao jogador, com transições suaves entre animações e estados.

Transição de Proximidade:

csharp

closeTransition: Esta transição verifica se o jogador está dentro de uma determinada distância horizontal (ThresholdDistance) do inimigo. Se a condição for atendida, a transição ocorre aleatoriamente para attack1 ou attack2 com probabilidade igual (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 esta condição quando o inimigo estiver no estado idle.

Por que Fizemos Desta Forma

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

Como Funciona no Contexto

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

Estados de Ataque:

Uma vez em attack1 ou attack2, o inimigo executa o ataque. Após finalizar o ataque, o toIdleTransition existente faz o inimigo retornar 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 curta distância. Isso aprimora a jogabilidade ao tornar o comportamento do inimigo mais responsivo e envolvente.

question mark

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

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 7

Pergunte à IA

expand

Pergunte à IA

ChatGPT

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

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

book
Estado de Ataque

csharp

Explicação da Classe AttackState

A classe AttackState é um estado específico que gerencia 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, além de lidar com a ação de atacar.

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; Nome do estado de ataque utilizado no animator. bool isAttacking; Indicador para verificar se o inimigo está atacando no momento. Animator animator; Controla as animações. Transform transform; Transform do inimigo, utilizado para posicionamento e raycasting. float range; Alcance do ataque. int damage; Dano causado pelo ataque. LayerMask playerLayer; Máscara de camada utilizada 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 layer mask para identificar o jogador, o nome do estado de ataque, o valor de dano e o alcance do ataque. Esses valores são atribuídos às variáveis membro correspondentes.

Método StartState

Este método define isStateFinished como false, aciona a animação de ataque ao definir o parâmetro booleano apropriado no animator como true e reinicia a flag isAttacking para false.

Método EndState

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

Método UpdateState

Este método é chamado a cada frame e aciona o método Attack para executar 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 finalizada.

Método de Ataque

Este método executa 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 Desta Forma

  • Controle Sobre o Comportamento de Ataque: A flag isAttacking permite controle preciso sobre quando o ataque deve ocorrer, tornando o comportamento mais responsivo aos eventos do jogo;

  • Execução Dinâmica do 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 com Animação: O uso de parâmetros do animador garante que as animações do inimigo estejam corretamente sincronizadas com seus ataques, proporcionando uma experiência fluida e realista.

Funcionamento no Contexto

Entrada 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.

Início do Ataque: O método StartAction define isAttacking como true, permitindo que o método Attack execute a ação de ataque.

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

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

Saída 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 ao jogador, com transições suaves entre animações e estados.

Transição de Proximidade:

csharp

closeTransition: Esta transição verifica se o jogador está dentro de uma determinada distância horizontal (ThresholdDistance) do inimigo. Se a condição for atendida, a transição ocorre aleatoriamente para attack1 ou attack2 com probabilidade igual (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 esta condição quando o inimigo estiver no estado idle.

Por que Fizemos Desta Forma

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

Como Funciona no Contexto

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

Estados de Ataque:

Uma vez em attack1 ou attack2, o inimigo executa o ataque. Após finalizar o ataque, o toIdleTransition existente faz o inimigo retornar 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 curta distância. Isso aprimora a jogabilidade ao tornar o comportamento do inimigo mais responsivo e envolvente.

question mark

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

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

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