Tutorial til 2D-spiller nærkampsangreb for Unity

Unity Engine giver en omfattende platform til at skabe både 2D- og 3D-spil. Et af de grundlæggende elementer i mange actionspil er nærkampsangrebet. I et 2D-miljø består et sådant angreb ofte af en karakter, der svinger et våben eller kaster et slag, og det kan opnås ved hjælp af en kombination af Unity-animationer, fysik og scriptværktøjer.

Forudsætninger

1. Opsætning af projektet og scenen

  • Opret et nyt 2D Unity-projekt (hvis ikke endnu).
  • Importer eller opret en karaktersprite. Placer det i scenen.

2. Opsætning af Melee Attack Animation

  • I projektvinduet skal du højreklikke og oprette en "Animator Controller". Navngiv den "CharacterAnimator".
  • Tildel denne animator til karakteren ved at vælge karakteren og trække animatoren til "Animator"-komponenten.
  • Åbn Animation-vinduet. Med karakteren valgt, opret en ny animation ved navn "MeleeAttack".
  • Lad os for nemheds skyld antage, at dette angreb er et hurtigt slag. Animer spriten for at simulere denne handling.

3. Oprettelse af Attack Hitbox

  • Tilføj et tomt GameObject som et barn til karakteren. Dette vil fungere som hitbox for angrebet.
  • Vedhæft en "Box Collider 2D" til det tomme GameObject. Juster dens størrelse og position, så den matcher, hvor karakteren ville ramme under slaget.
  • Deaktiver hitboksen ved at fjerne markeringen i dens "Active"-boks. Dette sikrer, at den kun aktiveres under angrebsanimationen.

4. Skriver angrebslogikken

  • Opret et nyt script, navngiv det "MeleeAttack" og indsæt derefter 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 af kollisioner

  • Skift tags for fjendens spilobjekter til "Enemy".
  • Opret et nyt script, navngiv det "Hitbox" og indsæt derefter 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);
        }
    }
}
  • Vedhæft scriptet "Hitbox" til hitbox-objektet.

Spørgsmål til adresse:

  1. Hvordan ved hitboksen, hvornår den skal aktiveres under animationen?: Hitboxen aktiveres af 'Invoke' funktionen i 'MeleeAttack.cs' scriptet. Timingen kan justeres baseret på den ramme, hvor angrebet skal lande.
  2. Hvad sker der, hvis hitboxen kolliderer med flere fjender på én gang?: Ved at bruge det medfølgende 'Hitbox' script vil hver fjende med tagget "Enemy", der kolliderer med hitboxen, blive ødelagt. Juster scriptet for at håndtere skader eller andre effekter.
  3. Kan angrebsknappen ændres fra mellemrumstasten?: Ja, i 'MeleeAttack.cs' scriptet tjekker linjen if ('Input.GetKeyDown(KeyCode.Space)') efter mellemrumstasten tryk. Erstat 'KeyCode.Space' med en anden 'KeyCode' værdi for at ændre angrebsknappen.

Konklusion

Denne vejledning giver en grundlæggende ramme for implementering af et 2D nærkampsangreb i Unity. Forbedringer såsom tilføjelse af lydeffekter, visuel feedback og raffinering af hitdetektion-logikken kan yderligere forbedre nærkampsoplevelsen.