Tutorial sull'attacco corpo a corpo 2D per Unity

Il motore Unity fornisce un'ampia piattaforma per la creazione di giochi sia 2D che 3D. Uno degli elementi fondamentali in molti giochi d'azione è l'attacco corpo a corpo. In un ambiente 2D, un attacco di questo tipo consiste spesso in un personaggio che brandisce un'arma o sferra un pugno e può essere realizzato utilizzando una combinazione di animazioni Unity, fisica e strumenti di scripting.

Prerequisiti

1. Impostazione del progetto e della scena

  • Crea un nuovo progetto 2D Unity (se non l'hai ancora fatto).
  • Importa o crea uno sprite del personaggio. Posizionalo nella scena.

2. Impostazione dell'animazione dell'attacco in mischia

  • Nella finestra Progetto, fare clic con il pulsante destro del mouse e creare un file "Animator Controller". Chiamalo "CharacterAnimator".
  • Assegna questo animatore al personaggio selezionando il personaggio e trascinando l'animatore sul componente "Animator".
  • Apri la finestra Animazione. Con il personaggio selezionato, crea una nuova animazione denominata "MeleeAttack".
  • Per semplicità, supponiamo che questo attacco sia un pugno veloce. Anima lo sprite per simulare questa azione.

3. Creazione dell'hitbox di attacco

  • Aggiungi un GameObject vuoto come figlio al personaggio. Questo fungerà da hitbox per l'attacco.
  • Collega a "Box Collider 2D" al GameObject vuoto. Regola le sue dimensioni e la sua posizione in modo che corrispondano al punto in cui il personaggio colpirebbe durante il pugno.
  • Disattiva l'hitbox deselezionando la casella "Active". Ciò garantisce che si attivi solo durante l'animazione dell'attacco.

4. Script della logica di attacco

  • Crea un nuovo script, chiamalo "MeleeAttack" quindi incolla al suo interno il codice seguente:

'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);
    }
}
  • Allega lo script "MeleeAttack" al personaggio principale.
  • Regola i tempi di attivazione e disattivazione dell'hitbox in base all'*animazione h26.
  • Assegna il collisore hitbox all'Hitbox variabile.

5. Gestione delle collisioni

  • Cambia i tag degli oggetti di gioco nemici in "Enemy".
  • Crea un nuovo script, chiamalo "Hitbox" quindi incolla al suo interno il codice seguente:

'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);
        }
    }
}
  • Allega lo script "Hitbox" all'oggetto hitbox.

Domande da affrontare:

  1. Come fa l'hitbox a sapere quando attivarsi durante l'animazione?: L'hitbox viene attivato dalla funzione 'Invoke' nello script 'MeleeAttack.cs'. Il tempismo può essere regolato in base al frame in cui dovrebbe sferrare l'attacco.
  2. Cosa succede se l'hitbox si scontra con più nemici contemporaneamente?: Utilizzando lo script 'Hitbox' fornito, ogni nemico con il tag "Enemy" che si scontra con l'hitbox verrà distrutto. Modifica lo script per gestire danni o altri effetti.
  3. È possibile modificare il pulsante di attacco premendo il tasto Spazio?: Sì, nello script 'MeleeAttack.cs', la riga if ('Input.GetKeyDown(KeyCode.Space)') controlla la pressione del tasto Spazio. Sostituisci 'KeyCode.Space' con un altro valore 'KeyCode' per cambiare il pulsante di attacco.

Conclusione

Questa guida fornisce una struttura di base per implementare un attacco corpo a corpo 2D in Unity. Miglioramenti come l'aggiunta di effetti sonori, feedback visivo e il perfezionamento della logica rilevamento del colpo possono migliorare ulteriormente l'esperienza di attacco corpo a corpo.

Articoli suggeriti
Script per creare un interruttore della luce in Unity
Script di tiro con pistola basato su Raycast e proiettili per Unity
Come impostare il controller joystick per il movimento in Unity
Tutorial sul timer per il conto alla rovescia per Unity
Editor della mappa dell'altezza del terreno nel gioco per Unity
Script per porte per Unity
Una risorsa unitaria completa per ambienti acquatici immersivi