2D Melee Attack-tutorial voor Unity

De Unity Engine biedt een uitgebreid platform voor het maken van zowel 2D- als 3D-games. Een van de fundamentele elementen in veel actiegames is de melee-aanval. In een 2D-omgeving bestaat zo'n aanval vaak uit een personage dat met een wapen zwaait of een klap uitdeelt, en kan worden uitgevoerd met behulp van een combinatie van Unity-animaties, natuurkunde en scripttools.

Vereisten

1. Het project en de scène opzetten

  • Maak een nieuw 2D Unity-project (als dat nog niet is gebeurd).
  • Importeer of maak een karaktersprite. Plaats het in de scène.

2. De Melee Attack-animatie instellen

  • Klik met de rechtermuisknop in het projectvenster en maak een "Animator Controller". Noem het "CharacterAnimator".
  • Wijs deze animator toe aan het personage door het personage te selecteren en de animator naar de "Animator"-component te slepen.
  • Open het animatievenster. Maak, terwijl het personage is geselecteerd, een nieuwe animatie met de naam "MeleeAttack".
  • Laten we voor de eenvoud aannemen dat deze aanval een snelle klap is. Animeer de sprite om deze actie te simuleren.

3. De aanvalshitbox maken

  • Voeg een leeg GameObject toe als kind aan het personage. Dit zal fungeren als de hitbox voor de aanval.
  • Voeg een "Box Collider 2D" toe aan het lege GameObject. Pas de grootte en positie aan zodat deze overeenkomt met waar het personage tijdens de klap zou slaan.
  • Deactiveer de hitbox door het vakje "Active" uit te vinken. Dit zorgt ervoor dat het alleen wordt geactiveerd tijdens de aanvalsanimatie.

4. De aanvalslogica scripten

  • Maak een nieuw script, noem het "MeleeAttack" en plak de onderstaande code erin:

'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);
    }
}
  • Voeg het "MeleeAttack"-script toe aan het hoofdpersonage.
  • Pas de timing voor het activeren en deactiveren van de hitbox aan op basis van de animatie.
  • Wijs de hitbox-collider toe aan de Hitbox variabele.

5. Botsingen afhandelen

  • Verander de tags van de vijandelijke spelobjecten in "Enemy".
  • Maak een nieuw script, noem het "Hitbox" en plak de onderstaande code erin:

'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);
        }
    }
}
  • Koppel het script "Hitbox" aan het hitbox-object.

Vragen om te beantwoorden:

  1. Hoe weet de hitbox wanneer hij moet worden geactiveerd tijdens de animatie?: De hitbox wordt geactiveerd door de functie 'Invoke' in het 'MeleeAttack.cs'-script. De timing kan worden aangepast op basis van het frame waarin de aanval zou moeten landen.
  2. Wat gebeurt er als de hitbox met meerdere vijanden tegelijk in botsing komt? : Met behulp van het meegeleverde 'Hitbox'-script wordt elke vijand met de tag "Enemy" die in botsing komt met de hitbox vernietigd. Pas het script aan om schade of andere effecten te beheersen.
  3. Kan de aanvalsknop worden gewijzigd via de spatietoets? : Ja, in het 'MeleeAttack.cs'-script controleert de regel if ('Input.GetKeyDown(KeyCode.Space)') of er op de spatietoets is gedrukt. Vervang 'KeyCode.Space' door een andere 'KeyCode'-waarde om de aanvalsknop te wijzigen.

Conclusie

Deze handleiding biedt een basisframework voor het implementeren van een 2D-melee-aanval in Unity. Verbeteringen zoals het toevoegen van geluidseffecten, visuele feedback en het verfijnen van de hitdetectie-logica kunnen de melee-aanvalservaring verder verbeteren.

Voorgestelde artikelen
FPC Swimmer - Een alomvattend eenheidsmiddel voor meeslepende wateromgevingen
Muislook-script voor Unity
Script voor het maken van een lichtschakelaar in eenheid
Raycast- en projectielgebaseerd schietscript voor Unity
Joystickcontroller instellen voor beweging in eenheid
Countdown Timer-tutorial voor Unity
Zone Controller Pro - Unity Asset Store-pakket