Conteúdo do Curso
Jogo de Luta no Unity
Jogo de Luta no Unity
Enviar Projétil
A classe Projectile
é responsável por gerenciar o comportamento dos projéteis que o inimigo pode lançar no jogador. Esta classe lida com a configuração da direção e velocidade do projétil, atualizando seu movimento e lidando com colisões.
Método Setup
Propósito: Este método configura o estado inicial do projétil.
Parâmetros: Recebe um parâmetro Vector2 direction
para definir a direção que o projétil irá percorrer.
Ações: Define a direção do projétil, obtém o componente Rigidbody2D
anexado ao projétil, rotaciona o projétil para enfrentar a direção que irá percorrer e agenda a destruição do projétil após 6 segundos para evitar que ele exista indefinidamente.
Método Update
Propósito: Este método atualiza o movimento do projétil.
Ações: Define a velocidade do Rigidbody2D
para mover o projétil na direção especificada na velocidade especificada.
Método OnTriggerEnter2D
Propósito: Este método lida com colisões com outros objetos.
Parâmetros: Recebe um parâmetro Collider2D collision
para detectar colisões.
Ações: Registra o nome do objeto com o qual o projétil colidiu, verifica se o projétil colidiu com um objeto marcado como "Player" e, se o objeto tiver um componente que implementa a interface IGetAttacked
, chama o método GetAttacked
nesse componente para causar dano. Finalmente, destrói o projétil após atingir o jogador.
Por Que Fizemos Assim
Modular e Reutilizável: A classe Projectile
é projetada para ser modular e reutilizável para qualquer tipo de projétil que o inimigo possa usar. Ao definir a direção e a velocidade, vários projéteis com comportamentos diferentes podem ser criados.
Manuseio de Movimento Eficiente: Usar o componente Rigidbody2D
para movimento garante que o projétil se comporte de acordo com o sistema de física do Unity, proporcionando um movimento suave e realista.
Detecção de Colisão e Manuseio de Dano: O método OnTriggerEnter2D
garante que o projétil possa detectar colisões com o jogador e aplicar dano adequadamente, tornando a interação entre o projétil e o jogador eficaz.
Classe SendProjectileState
A classe SendProjectileState
é um estado específico que lida com o comportamento do inimigo quando ele lança um projétil. Esta classe herda da classe State
e inclui métodos para iniciar, terminar e iniciar a ação de ataque do projétil.
Construtor
O construtor inicializa o SendProjectileState
com um Animator
para animações e uma ação para enviar o projétil. Ele define esses valores para as variáveis membro correspondentes.
Método StartState
Este método define isStateFinished
como false
e aciona a animação do projétil definindo o parâmetro booleano "projectil" no animador como true
.
Método StartAction
Este método chama sendProjectileFunc
, que executa a ação definida para enviar o projétil. Este método é tipicamente chamado por um evento do animador para sincronizar o lançamento do projétil com a animação.
Método EndState
Este método para a animação do projétil definindo o parâmetro booleano "projectil" no animador como false
.
Por Que Fizemos Assim
Modular e Reutilizável:
A classe SendProjectileState
é projetada para ser modular, permitindo a integração flexível de diferentes comportamentos de envio de projéteis através do uso de System.Action
.
Integração de Animação: Ao usar parâmetros do animador, o estado garante que o lançamento do projétil seja sincronizado com a animação correspondente, proporcionando uma experiência suave e realista.
Função Enviar Projétil
O método SendProjectile
é responsável por criar e lançar um projétil em direção ao jogador. Este método calcula a direção do inimigo para o jogador, instancia o projétil e o configura para se mover na direção calculada.
Definição do Método e Componentes
Definição do Método:
void SendProjectile()
: Este método não retorna um valor e é projetado para lidar com o lançamento do projétil.
Componentes:
Vector2 direction = (player.position - transform.position).normalized;
Esta linha calcula a direção do inimigo para o jogador subtraindo a posição do inimigo da posição do jogador. A parte .normalized
garante que o vetor de direção tenha um comprimento de 1, tornando-o um vetor unitário que indica apenas a direção.
Instantiate(projectile, projectileSendingPosition.position, Quaternion.identity).Setup(direction);
Esta linha cria uma nova instância do projétil na posição especificada (projectileSendingPosition.position
) sem rotação (Quaternion.identity
). O método Setup
é chamado no projétil instanciado para definir sua direção.
Ligação com o Animator do Unity
Estamos chamando a função StartAction
usando eventos do animator. Isso nos permite especificar o quadro exato dentro da animação do inimigo no qual queremos que o projétil seja enviado. Como a animação consiste em muitos quadros, é importante identificar o momento preciso para que esta ação ocorra.
Obrigado pelo seu feedback!