Samouczek ataku wręcz 2D dla Unity

Silnik Unity zapewnia rozbudowaną platformę do tworzenia gier 2D i 3D. Jednym z podstawowych elementów wielu gier akcji jest atak wręcz. W środowisku 2D taki atak często polega na wymachiwaniu bronią przez postać lub zadaniu ciosu i można go przeprowadzić za pomocą kombinacji animacji Unity, fizyki i narzędzi skryptowych.

Warunki wstępne

1. Konfigurowanie projektu i sceny

  • Utwórz nowy projekt 2D Unity (jeśli jeszcze tego nie zrobiłeś).
  • Zaimportuj lub utwórz duszka postaci. Umieść to na scenie.

2. Konfigurowanie animacji ataku wręcz

  • W oknie Projekt kliknij prawym przyciskiem myszy i utwórz plik "Animator Controller". Nazwij to "CharacterAnimator".
  • Przypisz tego animatora do postaci, wybierając postać i przeciągając animatora do komponentu "Animator".
  • Otwórz okno Animacja. Po wybraniu postaci utwórz nową animację o nazwie "MeleeAttack".
  • Dla uproszczenia załóżmy, że ten atak to szybki cios. Animuj duszka, aby zasymulować tę akcję.

3. Tworzenie pola trafienia ataku

  • Dodaj pusty GameObject jako dziecko do postaci. Będzie to działać jako hitbox dla ataku.
  • Dołącz i "Box Collider 2D" do pustego obiektu GameObject. Dostosuj jego rozmiar i położenie, aby dopasować je do miejsca, w które postać uderzy podczas uderzenia.
  • Dezaktywuj hitbox, odznaczając jego pole "Active". Dzięki temu aktywuje się tylko podczas animacji ataku.

4. Skryptowanie logiki ataku

  • Utwórz nowy skrypt, nazwij go "MeleeAttack" i wklej w nim poniższy kod:

'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. Obsługa kolizji

  • Zmień znaczniki obiektów wroga na "Enemy".
  • Utwórz nowy skrypt, nazwij go "Hitbox" i wklej w nim poniższy kod:

'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);
        }
    }
}
  • Dołącz skrypt "Hitbox" do obiektu hitbox.

Pytania do rozwiązania:

  1. Skąd hitbox wie, kiedy aktywować się podczas animacji?: Hitbox jest aktywowany przez funkcję 'Invoke' w skrypcie 'MeleeAttack.cs'. Czas można dostosować w zależności od klatki, w której ma nastąpić atak.
  2. Co się stanie, jeśli hitbox zderzy się z wieloma wrogami na raz?: Używając dostarczonego skryptu 'Hitbox', każdy wróg z tagiem "Enemy", który zderzy się z hitboxem, zostanie zniszczony. Dostosuj skrypt, aby zarządzać obrażeniami i innymi efektami.
  3. Czy przycisk ataku można zmienić za pomocą klawisza spacji?: Tak, w skrypcie 'MeleeAttack.cs' linia if ('Input.GetKeyDown(KeyCode.Space)') sprawdza naciśnięcie klawisza spacji. Zamień 'KeyCode.Space' na inną wartość 'KeyCode', aby zmienić przycisk ataku.

Wniosek

Ten przewodnik zapewnia podstawowe ramy wdrażania ataku wręcz 2D w Unity. Ulepszenia, takie jak dodanie efektów dźwiękowych, wizualne sprzężenie zwrotne i udoskonalenie logiki wykrywania trafień, mogą jeszcze bardziej ulepszyć wrażenia z ataku wręcz.