Tutorial de ataque cuerpo a cuerpo 2D para Unity

El motor Unity proporciona una plataforma extensa para crear juegos 2D y 3D. Uno de los elementos fundamentales de muchos juegos de acción es el ataque cuerpo a cuerpo. En un entorno 2D, un ataque de este tipo a menudo consiste en un personaje blandiendo un arma o lanzando un puñetazo, y se puede lograr utilizando una combinación de animaciones Unity, físicas y herramientas de secuencias de comandos.

Requisitos previos

1. Configurar el proyecto y la escena

  • Cree un nuevo proyecto 2D Unity (si aún no lo ha hecho).
  • Importa o crea un objeto de personaje. Colóquelo en la escena.

2. Configurar la animación del ataque cuerpo a cuerpo

  • En la ventana Proyecto, haga clic derecho y cree un "Animator Controller". Nómbrelo "CharacterAnimator".
  • Asigne este animador al personaje seleccionando el personaje y arrastrando el animador al componente "Animator".
  • Abra la ventana Animación. Con el personaje seleccionado, crea una nueva animación llamada "MeleeAttack".
  • Para simplificar, supongamos que este ataque es un golpe rápido. Anima el objeto para simular esta acción.

3. Creando el hitbox de ataque

  • Agrega un GameObject vacío como hijo del personaje. Esto actuará como hitbox para el ataque.
  • Adjunte a "Box Collider 2D" al GameObject vacío. Ajusta su tamaño y posición para que coincida con el lugar donde golpearía el personaje durante el golpe.
  • Desactiva el hitbox desmarcando su casilla "Active". Esto garantiza que solo se active durante la animación del ataque.

4. Scripting de la lógica del ataque

  • Cree un nuevo script, asígnele el nombre "MeleeAttack" y luego pegue el siguiente código dentro de él:

'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);
    }
}

5. Manejo de colisiones

  • Cambia las etiquetas de los objetos enemigos del juego a "Enemy".
  • Cree un nuevo script, asígnele el nombre "Hitbox" y luego pegue el siguiente código dentro de él:

'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);
        }
    }
}
  • Adjunte el script "Hitbox" al objeto hitbox.

Preguntas a abordar:

  1. ¿Cómo sabe el hitbox cuándo activarse durante la animación?: El hitbox se activa mediante la función 'Invoke' en el script 'MeleeAttack.cs'. El tiempo se puede ajustar según el cuadro donde se supone que aterrizará el ataque.
  2. ¿Qué sucede si el hitbox choca con varios enemigos a la vez? : usando el script 'Hitbox' proporcionado, cada enemigo con la etiqueta "Enemy" que colisiona con el hitbox será destruido. Ajuste el guión para gestionar daños u otros efectos.
  3. ¿Se puede cambiar el botón de ataque desde la tecla Espacio?: Sí, en el script 'MeleeAttack.cs', la línea if ('Input.GetKeyDown(KeyCode.Space)') verifica si se presiona la tecla Espacio. Reemplace 'KeyCode.Space' con otro valor 'KeyCode' para cambiar el botón de ataque.

Conclusión

Esta guía proporciona un marco básico para implementar un ataque cuerpo a cuerpo 2D en Unity. Mejoras como agregar efectos de sonido, retroalimentación visual y refinar la lógica detección de impactos pueden mejorar aún más la experiencia de ataque cuerpo a cuerpo.

Artículos sugeridos
Script para crear un interruptor de luz en Unity
Guión de disparos de armas basado en Raycast y proyectiles para Unity
Cómo configurar el controlador de joystick para el movimiento en Unity
Tutorial del temporizador de cuenta regresiva para Unity
Editor de mapas de altura del terreno en el juego para Unity
Un activo integral de Unity para entornos acuáticos inmersivos
Guión con aspecto de ratón para Unity