Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Ataques do Jogador | Comportamento do Jogador
Jogo de Luta no Unity

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

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 3

Pergunte à IA

expand

Pergunte à IA

ChatGPT

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

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

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

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