Ataques do Jogador
Gizmos
private void OnDrawGizmos()
{
Gizmos.DrawLine(transform.position, ((Vector2)transform.position + 4f * Vector2.right * localScale.x));
}
private void OnDrawGizmos()
: Declaração do método para o callback OnDrawGizmos, indicando que o Unity chamará automaticamente este método quando os Gizmos forem desenhados na visualização da Cena para fins de visualização;Gizmos.DrawLine(...)
: Este código desenha uma linha usando Gizmos. Recebe dois pontos como argumentos para definir a linha;transform.position
: Representa a posição atual do GameObject ao qual este script está anexado;((Vector2)transform.position + 4f * Vector2.right * localScale.x)
: Calcula o segundo ponto da linha. Utiliza a posição atual do GameObject (transform.position
) e soma um vetor que se estende 4 unidades para a direita (4f * Vector2.right
).localScale.x
é utilizado para ajustar o comprimento da linha e a direção com base na escala do GameObject no eixo x.
De modo geral, este código desenha uma linha na visualização da Cena a partir da posição atual do GameObject
até um ponto que está 4 unidades à direita, com o comprimento e a direção ajustados conforme a escala do GameObject
no eixo x. Utilizaremos isso para visualizar o alcance de cada ataque do jogador.
Script de Ataque
bool isAttacking;
float range;
[SerializeField] LayerMask enemyLayer;
private void Start()
{
isAttacking = false;
range = 0f;
}
public void StartAttacking(float attackRange)
{
isAttacking = true;
range = attackRange;
}
public void EndAttacking()
{
isAttacking = false;
range = 0f;
}
private void Update()
{
if (isAttacking)
{
RaycastHit2D rayCastHit = Physics2D.Raycast(transform.position, Vector2.right * transform.localScale.x, range, enemyLayer);
if (rayCastHit)
{
Debug.Log(rayCastHit.transform.name);
isAttacking = false;
}
}
}
Ao iniciar o ataque, a função StartAttacking
será chamada, recebendo o alcance do ataque como parâmetro. Como cada ataque possui um alcance diferente, o ataque será iniciado e o alcance configurado de acordo.
Na função Update
, quando o jogador estiver atacando, será criado um RayCast a partir do jogador, na direção em que ele está voltado, com uma distância igual ao alcance do ataque, filtrando apenas o enemyLayer
.
Se atingirmos um inimigo, por enquanto exibiremos o nome dele no debug, mas no futuro, iremos recuperar sua vida e atacá-lo.
Além disso, temos uma função EndAttacking
, que irá finalizar nosso ataque.
Eventos de Animação
Adicionando Eventos
Na janela Animation do Unity, é possível adicionar eventos aos clipes de animação em quadros específicos. Clique com o botão direito na curva de animação ou no keyframe para adicionar um evento de animação e especifique a função e os parâmetros opcionais.
Definindo Funções
Funções chamadas por Eventos de Animação devem ser públicas. O sistema de Eventos de Animação do Unity suporta parâmetros opcionais do tipo float e string, invocando automaticamente funções especificadas durante a execução da animação para sincronizar animações com a lógica do jogo e acionar diversas ações.
Obrigado pelo seu feedback!