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

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);
    }
}

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:

  1. 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.
  2. 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.
  3. 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.

Foreslåtte artikler
FPC Swimmer - En omfattende enhetsressurs for oppslukende vannmiljøer
Skript for å lage en lysbryter i Unity
Raycast og prosjektilbasert pistolskyteskript for Unity
Hvordan sette opp joystick-kontrolleren for bevegelse i enhet
Nedtellingstimeropplæring for Unity
RTS-stil enhetsvalg for Unity
Terrenghøydekartredigerer i spillet for Unity