Comment tirer un coup de feu dans Unity

Dans ce tutoriel, nous allons vous expliquer étape par étape comment tirer dans Unity. Vous apprendrez à créer un projectile de base qui se déplace vers l'avant et interagit avec d'autres objets. À la fin, vous disposerez d'un script fonctionnel qui peut être attaché à un GameObject pour simuler un tir dans un jeu.

Mise en place de la scène

Avant de nous plonger dans le codage, commençons par configurer la scène pour créer un projectile. Voici les étapes à suivre pour commencer:

  1. Créez un nouveau projet Unity ou ouvrez-en un existant.
  2. Créez un objet 3D (par exemple, un cube ou une sphère) dans votre scène, qui agira comme le joueur ou l'objet tirant le coup.
  3. Créez un autre objet 3D (par exemple, une sphère plus petite) qui fera office de projectile. Il sera instancié lorsque le tir sera effectué.
  4. Organisez vos objets en leur donnant des noms significatifs, tels que "Player" et "ProjectilePrefab".

Création du script de prise de vue

Maintenant que nous avons notre scène de base, créons le script qui gérera le tir. Nous nommerons le script Shot.cs et l'attacherons à l'objet joueur. Ce script fera apparaître le projectile et appliquera une force vers l'avant pour simuler le tir.

Suivez ces étapes pour créer le script:

  1. Dans l'éditeur Unity, faites un clic droit dans la fenêtre Projet et sélectionnez Créer > Script C#. Nommez le script Shot.cs.
  2. Double-cliquez sur le fichier Shot.cs pour l'ouvrir dans votre éditeur de code.
  3. Remplacez le code par défaut par le script suivant:
using UnityEngine;

public class Shot : MonoBehaviour
{
    public GameObject projectilePrefab;  // The prefab of the projectile to shoot
    public Transform firePoint;          // The point where the projectile will be fired from
    public float projectileSpeed = 20f;  // Speed of the projectile

    void Update()
    {
        // Check if the player presses the fire button (default is left mouse button or spacebar)
        if (Input.GetButtonDown("Fire1"))
        {
            FireShot();
        }
    }

    void FireShot()
    {
        // Instantiate the projectile at the fire point's position and rotation
        GameObject projectile = Instantiate(projectilePrefab, firePoint.position, firePoint.rotation);

        // Get the Rigidbody component of the projectile to apply physics
        Rigidbody rb = projectile.GetComponent();

        if (rb != null)
        {
            // Apply force to the projectile to make it move forward
            rb.velocity = firePoint.forward * projectileSpeed;
        }
    }
}

Ce script effectue les tâches suivantes:

  • Définit un projectilePrefab public pour contenir l'objet projectile.
  • Utilise un firePoint pour spécifier l'origine du tir.
  • Utilise projectileSpeed pour contrôler la vitesse du projectile.
  • Vérifie l'entrée du joueur à l'aide de Input.GetButtonDown("Fire1"), qui écoute l'action "Fire1" (généralement mappée sur le bouton gauche de la souris ou la barre d'espace).
  • Instancie un projectile au firePoint et lui applique une vitesse vers l'avant.

Affectation du script dans Unity

Maintenant que le script est prêt, il est temps de l'assigner à l'objet joueur et de configurer les références:

  1. Sélectionnez le GameObject "Player" dans la scène.
  2. Faites glisser le script Shot.cs sur le "Player" pour le joindre.
  3. Dans la fenêtre Inspecteur, vous verrez les champs du script. Affectez le préfabriqué de projectile (par exemple, la petite sphère que vous avez créée) à l'emplacement ProjectilePrefab.
  4. Créez un GameObject vide sous l'objet joueur et nommez-le "FirePoint". Positionnez-le devant le joueur ou à l'endroit où vous souhaitez que le projectile apparaisse.
  5. Faites glisser l'objet "FirePoint" dans le champ FirePoint du script.

Tester le tir

Pour tester la fonctionnalité de tir, appuyez sur le bouton Play dans Unity et appuyez sur le bouton de tir (par défaut, c'est le bouton gauche de la souris ou la barre d'espace). Vous devriez voir le projectile apparaître et avancer lorsque vous appuyez sur le bouton. Vous pouvez modifier la vitesse ou l'apparence du projectile pour mieux répondre à vos besoins.

Questions fréquemment posées

Comment détruire le projectile après l'avoir tiré ?

Pour éviter que vos projectiles n'existent éternellement, vous pouvez les détruire après un certain temps. Dans la méthode FireShot, après avoir instancié le projectile, vous pouvez ajouter:

Destroy(projectile, 5f); // Destroys the projectile after 5 seconds

Comment ajouter des effets sonores ou des animations à la prise de vue ?

Vous pouvez ajouter des effets sonores en utilisant le composant AudioSource. Ajoutez-le simplement au lecteur et jouez un son dans la méthode FireShot:

AudioSource audioSource = GetComponent();
audioSource.Play();

Pour les animations, vous pouvez déclencher une animation à l'aide du composant Animator ou en activant/désactivant certains états GameObject dans la méthode FireShot.

Comment faire interagir le projectile avec d’autres objets ?

Pour que le projectile interagisse avec d'autres objets, assurez-vous que le projectile possède un composant Rigidbody et un composant Collider. Vous pouvez ensuite écrire un script pour gérer la détection de collision en utilisant OnCollisionEnter ou OnTriggerEnter:

void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Enemy"))
    {
        Destroy(collision.gameObject); // Destroy enemy on collision
        Destroy(gameObject);           // Destroy the projectile
    }
}

Conclusion

Nous espérons que ce tutoriel vous a aidé à apprendre à tirer dans Unity en créant un projectile, en lui appliquant une force et en gérant la détection de collision de base. Cette technique peut être étendue à des interactions plus complexes, telles que l'ajout d'effets, de son ou de physique avancée.