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
- Unity Silnik zainstalowany i skonfigurowany.
- Podstawowa znajomość interfejsu Unity i przestrzeni 2D.
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);
}
}
- Dołącz skrypt "MeleeAttack" do głównego bohatera.
- Dostosuj czasy aktywacji i dezaktywacji hitboxów w oparciu o animację.
- Przypisz hitbox collider do hitboxa zmienna.
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:
- 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.
- 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.
- 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.