Tutoriel d'attaque de mêlée 2D pour Unity

Le moteur Unity fournit une plate-forme étendue pour créer des jeux 2D et 3D. L’attaque au corps à corps est l’un des éléments fondamentaux de nombreux jeux d’action. Dans un environnement 2D, une telle attaque consiste souvent en un personnage brandissant une arme ou lançant un coup de poing, et elle peut être réalisée en utilisant une combinaison d'animations Unity, de physique et d'outils de script.

Conditions préalables

1. Configuration du projet et de la scène

  • Créez un nouveau projet 2D Unity (si ce n'est pas déjà fait).
  • Importez ou créez un sprite de personnage. Placez-le dans la scène.

2. Configuration de l'animation d'attaque en mêlée

  • Dans la fenêtre Projet, cliquez avec le bouton droit et créez un "Animator Controller". Nommez-le "CharacterAnimator".
  • Attribuez cet animateur au personnage en sélectionnant le personnage et en faisant glisser l'animateur vers le composant "Animator".
  • Ouvrez la fenêtre Animation. Avec le personnage sélectionné, créez une nouvelle animation nommée "MeleeAttack".
  • Pour simplifier, supposons que cette attaque soit un coup de poing rapide. Animez le sprite pour simuler cette action.

3. Création de la Hitbox d'attaque

  • Ajoutez un GameObject vide en tant qu'enfant au personnage. Cela servira de hitbox pour l’attaque.
  • Attachez un "Box Collider 2D" au GameObject vide. Ajustez sa taille et sa position en fonction de l'endroit où le personnage frapperait pendant le coup de poing.
  • Désactivez la hitbox en décochant sa case "Active". Cela garantit qu'il ne s'active que pendant l'animation d'attaque.

4. Script de la logique d'attaque

  • Créez un nouveau script, nommez-le "MeleeAttack" puis collez le code ci-dessous à l'intérieur:

'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. Gérer les collisions

  • Changez les tags des objets du jeu ennemis en "Enemy".
  • Créez un nouveau script, nommez-le "Hitbox" puis collez le code ci-dessous à l'intérieur:

'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);
        }
    }
}
  • Attachez le script "Hitbox" à l'objet hitbox.

Questions à aborder:

  1. Comment la hitbox sait-elle quand s'activer pendant l'animation ?: La hitbox est activée par la fonction 'Invoke' dans le script 'MeleeAttack.cs'. Le timing peut être ajusté en fonction de l'image où l'attaque est censée atterrir.
  2. Que se passe-t-il si la hitbox entre en collision avec plusieurs ennemis à la fois ?: En utilisant le script 'Hitbox' fourni, chaque ennemi avec le tag "Enemy" qui entre en collision avec la hitbox sera détruit. Ajustez le script pour gérer les dégâts ou d’autres effets.
  3. Le bouton d'attaque peut-il être modifié à partir de la touche Espace ?: Oui, dans le script 'MeleeAttack.cs', la ligne if ('Input.GetKeyDown(KeyCode.Space)') vérifie la pression sur la touche Espace.. Remplacez 'KeyCode.Space' par une autre valeur 'KeyCode' pour changer le bouton d'attaque.

Conclusion

Ce guide fournit un cadre de base pour implémenter une attaque de mêlée 2D dans Unity. Des améliorations telles que l'ajout d'effets sonores, de retours visuels et l'affinement de la logique détection de coup peuvent encore améliorer l'expérience d'attaque en mêlée.

Articles suggérés
Script pour créer un interrupteur d'éclairage dans Unity
Tutoriel sur le compte à rebours pour Unity
Éditeur de cartes de hauteur de terrain en jeu pour Unity
FPC Swimmer - Un atout Unity complet pour les environnements aquatiques immersifs
Script de recherche de souris pour Unity
Script de tir au pistolet basé sur Raycast et Projectile pour Unity
Comment configurer le contrôleur de joystick pour le mouvement dans Unity