Tutorial de ataque corpo a corpo 2D para Unity

O Unity Engine fornece uma plataforma extensa para a criação de jogos 2D e 3D. Um dos elementos fundamentais em muitos jogos de ação é o ataque corpo a corpo. Em um ambiente 2D, tal ataque geralmente consiste em um personagem balançando uma arma ou dando um soco, e pode ser realizado usando uma combinação de animações Unity, física e ferramentas de script.

Pré-requisitos

1. Configurando o projeto e a cena

  • Crie um novo projeto 2D Unity (se ainda não o fez).
  • Importe ou crie um sprite de personagem. Coloque-o na cena.

2. Configurando a animação de ataque corpo a corpo

  • Na janela Projeto, clique com o botão direito e crie um "Animator Controller". Nomeie-o como "CharacterAnimator".
  • Atribua este animador ao personagem selecionando o personagem e arrastando o animador para o componente "Animator".
  • Abra a janela Animação. Com o personagem selecionado, crie uma nova animação chamada "MeleeAttack".
  • Para simplificar, vamos supor que este ataque seja um soco rápido. Anime o sprite para simular esta ação.

3. Criando o Hitbox de Ataque

  • Adicione um GameObject vazio como filho do personagem. Isso funcionará como hitbox para o ataque.
  • Anexe a "Box Collider 2D" ao GameObject vazio. Ajuste seu tamanho e posição para corresponder ao local onde o personagem acertaria durante o soco.
  • Desative o hitbox desmarcando sua caixa "Active". Isso garante que ele seja ativado apenas durante a animação de ataque.

4. Script da lógica de ataque

  • Crie um novo script, nomeie-o "MeleeAttack" e cole o código abaixo dentro dele:

'MeleeAttack.cs'

using UnityEngine;

public class MeleeAttack : MonoBehaviour
{
    private Animator animator;
    private BoxCollider2D hitbox;

    private void Start()
    {
        animator = GetComponent<Animator>();
        hitbox = transform.Find("HitboxGameObjectName").GetComponent<BoxCollider2D>();
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space)) // Attack on Space key press.
        {
            animator.SetTrigger("MeleeAttack");
            Invoke("ActivateHitbox", 0.2f); // Activate hitbox after 0.2 seconds.
            Invoke("DeactivateHitbox", 0.4f); // Deactivate hitbox after 0.4 seconds.
        }
    }

    void ActivateHitbox()
    {
        hitbox.gameObject.SetActive(true);
    }

    void DeactivateHitbox()
    {
        hitbox.gameObject.SetActive(false);
    }
}
  • Anexe o script "MeleeAttack" ao personagem principal .
  • Ajuste os tempos de ativação e desativação do hitbox com base na animação.
  • Atribua o colisor hitbox à variável Hitbox .

5. Lidando com Colisões

  • Altere as tags dos objetos do jogo inimigo para "Enemy".
  • Crie um novo script, nomeie-o "Hitbox" e cole o código abaixo dentro dele:

'Hitbox.cs'

using UnityEngine;

public class Hitbox : MonoBehaviour
{
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Enemy"))
        {
            // Damage or destroy the enemy.
            Destroy(collision.gameObject);
        }
    }
}
  • Anexe o script "Hitbox" ao objeto hitbox.

Perguntas a serem abordadas:

  1. Como o hitbox sabe quando ativar durante a animação?: O hitbox é ativado pela função 'Invoke' no script 'MeleeAttack.cs'. O tempo pode ser ajustado com base no quadro onde o ataque deve ocorrer.
  2. O que acontece se o hitbox colidir com vários inimigos ao mesmo tempo?: Usando o script 'Hitbox' fornecido, cada inimigo com a tag "Enemy" que colidir com o hitbox será destruído. Ajuste o script para gerenciar danos ou outros efeitos.
  3. O botão de ataque pode ser alterado a partir da tecla Espaço?: Sim, no script 'MeleeAttack.cs', a linha if ('Input.GetKeyDown(KeyCode.Space)') verifica o pressionamento da tecla Espaço. Substitua 'KeyCode.Space' por outro valor 'KeyCode' para alterar o botão de ataque.

Conclusão

Este guia fornece uma estrutura básica para implementar um ataque corpo a corpo 2D em Unity. Aprimoramentos como adição de efeitos sonoros, feedback visual e refinamento da lógica detecção de golpes podem aprimorar ainda mais a experiência de ataque corpo a corpo.