2D nærkampangrepsopplæring for Unity
Unity Engine gir en omfattende plattform for å lage både 2D- og 3D-spill. Et av de grunnleggende elementene i mange actionspill er nærkampangrepet. I et 2D-miljø består et slikt angrep ofte av en karakter som svinger et våpen eller kaster et slag, og det kan oppnås ved å bruke en kombinasjon av Unity-animasjoner, fysikk og skriptverktøy.
Forutsetninger
- Unity Motor installert og satt opp.
- Grunnleggende kjennskap til Unity grensesnitt og 2D space.
1. Sette opp prosjektet og scenen
- Opprett et nytt 2D Unity-prosjekt (hvis ikke ennå).
- Importer eller lag en karaktersprite. Plasser den i scenen.
2. Sette opp Melee Attack-animasjonen
- I prosjektvinduet høyreklikker du og oppretter en "Animator Controller". Gi det navnet "CharacterAnimator".
- Tilordne denne animatøren til karakteren ved å velge karakteren og dra animatøren til "Animator"-komponenten.
- Åpne animasjonsvinduet. Med tegnet valgt, lag en ny animasjon kalt "MeleeAttack".
- For enkelhets skyld, la oss anta at dette angrepet er et raskt slag. Animer spriten for å simulere denne handlingen.
3. Opprette Attack Hitbox
- Legg til et tomt GameObject som barn til karakteren. Dette vil fungere som treffboksen for angrepet.
- Fest en "Box Collider 2D" til det tomme GameObject. Juster størrelsen og posisjonen for å matche hvor karakteren ville treffe under slaget.
- Deaktiver treffboksen ved å fjerne merket for "Active"-boksen. Dette sikrer at den bare aktiveres under angrepsanimasjonen.
4. Skriver angrepslogikken
- Lag et nytt skript, navngi det "MeleeAttack" og lim inn koden nedenfor i det:
'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);
}
}
- Fest skriptet "MeleeAttack" til hovedpersonen.
- Juster hitbox-aktiverings- og deaktiveringstidspunktene basert på animasjonen.
- Tilordne hitbox-kollideren til Hitbox variabelen.
5. Håndtering av kollisjoner
- Endre taggene til fiendtlige spillobjekter til "Enemy".
- Lag et nytt skript, navngi det "Hitbox" og lim inn koden nedenfor i det:
'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);
}
}
}
- Fest skriptet "Hitbox" til hitbox-objektet.
Spørsmål å adressere:
- Hvordan vet hitboxen når den skal aktiveres under animasjonen?: Hitboxen aktiveres av 'Invoke'-funksjonen i 'MeleeAttack.cs'-skriptet. Timingen kan justeres basert på rammen der angrepet skal lande.
- Hva skjer hvis treffboksen kolliderer med flere fiender samtidig?: Ved å bruke det medfølgende 'Hitbox'-skriptet, vil hver fiende med taggen "Enemy" som kolliderer med treffboksen bli ødelagt. Juster skriptet for å håndtere skade eller andre effekter.
- Kan angrepsknappen endres fra mellomromstasten?: Ja, i 'MeleeAttack.cs'-skriptet, sjekker linjen if ('Input.GetKeyDown(KeyCode.Space)') etter mellomromstastetrykket. Bytt ut 'KeyCode.Space' med en annen 'KeyCode' verdi for å endre angrepsknappen.
Konklusjon
Denne veiledningen gir et grunnleggende rammeverk for implementering av et 2D nærkampsangrep i Unity. Forbedringer som å legge til lydeffekter, visuell tilbakemelding og avgrense treffdeteksjon-logikken kan forbedre nærkampangrepsopplevelsen ytterligere.