2D-Nahkampfangriff-Tutorial für Unity

Die Unity Engine bietet eine umfassende Plattform zum Erstellen von 2D- und 3D-Spielen. Eines der Grundelemente vieler Actionspiele ist der Nahkampfangriff. In einer 2D-Umgebung besteht ein solcher Angriff oft darin, dass ein Charakter eine Waffe schwingt oder einen Schlag ausführt, und er kann mithilfe einer Kombination aus Unity-Animationen, Physik und Skripttools durchgeführt werden.

Voraussetzungen

  • Unity Engine installiert und eingerichtet.
  • Grundlegende Vertrautheit mit der Unity-Schnittstelle und dem 2D-Raum.

1. Projekt und Szene einrichten

  • Erstellen Sie ein neues 2D-Unity-Projekt (falls noch nicht geschehen).
  • Importieren oder erstellen Sie ein Charakter-Sprite. Platzieren Sie es in der Szene.

2. Einrichten der Nahkampfangriffsanimation

  • Klicken Sie im Projektfenster mit der rechten Maustaste und erstellen Sie ein "Animator Controller". Nennen Sie es "CharacterAnimator".
  • Weisen Sie diesen Animator der Figur zu, indem Sie die Figur auswählen und den Animator auf die Komponente "Animator" ziehen.
  • Öffnen Sie das Animationsfenster. Erstellen Sie mit dem ausgewählten Charakter eine neue Animation mit dem Namen "MeleeAttack".
  • Nehmen wir der Einfachheit halber an, dass dieser Angriff ein schneller Schlag ist. Animieren Sie das Sprite, um diese Aktion zu simulieren.

3. Erstellen der Angriffs-Hitbox

  • Füge dem Charakter ein leeres GameObject als untergeordnetes Element hinzu. Dies dient als Hitbox für den Angriff.
  • Hängen Sie ein "Box Collider 2D" an das leere GameObject an. Passen Sie Größe und Position an die Stelle an, an der die Figur beim Schlag treffen würde.
  • Deaktivieren Sie die Hitbox, indem Sie das Kontrollkästchen "Active" deaktivieren. Dadurch wird sichergestellt, dass es nur während der Angriffsanimation aktiviert wird.

4. Skripterstellung für die Angriffslogik

  • Erstellen Sie ein neues Skript, nennen Sie es "MeleeAttack" und fügen Sie dann den folgenden Code ein:

'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);
    }
}
  • Hängen Sie das "MeleeAttack"-Skript an die Hauptfigur an.
  • Passen Sie die Aktivierungs- und Deaktivierungszeiten der Hitbox basierend auf der Animation an.
  • Weisen Sie den Hitbox-Collider der Hitbox-Variable zu.

5. Umgang mit Kollisionen

  • Ändern Sie die Tags der feindlichen Spielobjekte in "Enemy".
  • Erstellen Sie ein neues Skript, nennen Sie es "Hitbox" und fügen Sie dann den folgenden Code ein:

'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);
        }
    }
}
  • Hängen Sie das Skript "Hitbox" an das Hitbox-Objekt an.

Zu beantwortende Fragen:

  1. Woher weiß die Hitbox, wann sie während der Animation aktiviert werden muss?: Die Hitbox wird durch die Funktion 'Invoke' in der Funktion 'MeleeAttack.cs' aktiviert -Skript. Das Timing kann basierend auf dem Frame angepasst werden, in dem der Angriff landen soll.
  2. Was passiert, wenn die Hitbox mit mehreren Feinden gleichzeitig kollidiert?: Mithilfe des bereitgestellten 'Hitbox'-Skripts wird jeder Feind mit dem Tag "Enemy", der kollidiert, identifiziert mit der Hitbox wird zerstört. Passen Sie das Skript an, um Schäden oder andere Effekte zu verwalten.
  3. Kann die Angriffstaste über die Leertaste geändert werden?: Ja, im Skript 'MeleeAttack.cs' ist die Zeile if ('Input.GetKeyDown(KeyCode.Space)' ) prüft, ob die Leertaste gedrückt wird. Ersetzen Sie 'KeyCode.Space' durch einen anderen 'KeyCode'-Wert, um die Angriffsschaltfläche zu ändern.

Abschluss

Dieser Leitfaden bietet einen grundlegenden Rahmen für die Implementierung eines 2D-Nahkampfangriffs in Unity. Verbesserungen wie das Hinzufügen von Soundeffekten, visuellem Feedback und die Verfeinerung der Treffererkennung-Logik können das Nahkampfangriffserlebnis weiter verbessern.

Empfohlene Artikel
FPC Swimmer – eine umfassende Einheit für immersive Wasserumgebungen
Maus-Look-Skript für Unity
Raycast- und projektilbasiertes Schießskript für Unity
So richten Sie den Joystick-Controller für die Bewegung in Unity ein
Zone Controller Pro – Unity Asset Store-Paket
So verwenden Sie das neue HDRP-Wassersystem in Unity
Ultimate Spawner 2.0 – ein bahnbrechendes Asset