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.

Artigos sugeridos
Script para criar um interruptor de luz no Unity
Script de tiro com arma baseado em Raycast e projéteis para Unity
Como configurar o controlador de joystick para movimento no Unity
Tutorial de contagem regressiva para Unity
Editor de mapa de altura de terreno no jogo para Unity
Scripts de porta para Unity
FPC Swimmer - Um ativo de unidade abrangente para ambientes aquáticos imersivos