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
- Unity Motor geïnstalleerd en afgesteld.
- Basiskennis van de Unity-interface en de 2D-ruimte.
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:
- 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.
- 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.
- 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.