Le tir de projectiles est une mécanique essentielle pour rendre les jeux interactifs et captivants.
Sans une implémentation correcte, les projectiles peuvent sembler irréalistes, affectant l’immersion du joueur.
Cet article explore comment coder efficacement le tir de projectiles dans Unity, en s’assurant d’une animation fluide et d’interactions réalistes.
Devenez expert en animation 2D et design de niveaux avec Unity.
Dans cette section, nous allons voir comment coder le tir de notre personnage dans Unity. Le tir d’un projectile ajoute une dynamique supplémentaire à votre jeu, rendant l’interaction plus captivante. Nous allons commencer par préparer l’animation du projectile (ou bullet), puis intégrer un code pour gérer la mécanique du tir. L’objectif est de permettre à notre personnage de tirer un projectile lorsqu’une touche est pressée.
Préparation tir de projectiles Unity
Pour commencer, nous avons à disposition un sprite destiné à représenter le projectile (Confère ressource). Comme pour le personnage, nous allons le transformer en spritesheet pour pouvoir animer le projectile.
- Importer le sprite du projectile :Dans le dossier des sprites, sélectionnez le sprite destiné à l’animation du projectile et configurez-le en spritesheet.
- Créer le bullet :Sélectionnez un sprite dans le lot et faites-le glisser sur la scène. Renommez l’objet Bullet. Cet objet représentera le projectile du personnage.
- Ajoutez un Circle Collider 2D pour gérer la collision du bullet avec d’autres objets.
- Ajoutez un Rigidbody2D pour permettre au bullet d’interagir avec la physique du jeu.
- Freezer la position Y :Dans les paramètres du Rigidbody2D, activez l’option « Freeze Position Y ». Cela garantit que le projectile ne bouge que sur l’axe X et ne tombe pas sous l’effet de la gravité.
Avec les sprites obtenus du bullet spritesheet, créez une nouvelle animation nommée Bullet . Définissez le sample rate à 10 pour une animation fluide. Cela crée automatiquement un Animator sur l’objet Bullet, que nous pourrons utiliser pour gérer l’animation. Sur l’objet Bullet, ajoutez un Trail Renderer pour laisser une traînée derrière le projectile. Configurez les paramètres :
- Time :0.1 pour une traînée courte.
- Min Vertex Distance :0.05 pour une traînée fluide.
- Color :Utilisez une couleur avec un effet de fondu pour que la traînée disparaisse progressivement.
Une fois ces étapes réalisées, vous devriez avoir un projectile qui se déplace de manière fluide avec une traînée visuelle. Vous pouvez ajuster les paramètres pour obtenir un effet satisfaisant en fonction de l’esthétique de votre jeu.
Lancez le mode Play pour observer l’effet de la traînée sur le projectile et son interaction avec le décor. Si vous constatez que le bullet interagit avec le sol de manière incorrecte, assurez-vous que les composants Rigidbody2D et Collider sont bien configurés. Le Freeze Position Y devrait garantir que le bullet reste horizontal.
Implémentation mécanique de tir Unity
Voici le code qui gère le tir du personnage :
usingUnityEngine;
publicclassRobotControllerA : MonoBehaviour {
/***/
privateboolisGrounded;
// Pour déterminer la direction du tir (gauche ou droite)
privateboolisLeft = false;
[SerializeField] LayerMask layerMask;
// Référence au prefab du projectile (bullet)
[SerializeField] GameObject bulletPrefab;
[SerializeField] floatfireRate = 0.1f; // Temps entre chaque tir
privatefloatnextFire; // Gère le temps du prochain tir
voidUpdate() {
/***/
// Si la touche est pressée
boolisShooting = Input.GetKey(KeyCode.LeftControl);
if (isShooting &&
isGrounded) // Le tir ne se fait que si le personnage est au sol
{
// Si le délai entre les tirs est respecté
if (nextFire < Time.time) {
// Définit le prochain tir possible
nextFire = fireRate + Time.time;
// Définit la direction du tir en fonction de l'orientation du
// personnage
Vector2 dirBullet = isLeft ? Vector2.left : Vector2.right;
// Instancie le bullet à la position du personnage
GameObject go =
Instantiate(bulletPrefab, transform.position, Quaternion.identity);
// Applique une force pour lancer le projectile
go.GetComponent().AddForce(dirBullet * 900);
Destroy(go, 3f); // Détruit le projectile après 3 secondes
}
}
}
}
Gestion du tir et instanciation des projectiles
Ce code gère la mécanique de tir du personnage. Lorsque le joueur appuie sur la touche LeftControl, le personnage tire un projectile dans la direction où il regarde (gauche ou droite). Le tir est régulé par une variable fireRate pour éviter que le joueur ne tire trop rapidement. Le projectile est instancié à la position du personnage et lancé avec une force prédéfinie, avant d’être détruit automatiquement après un délai.
Vous observerez peut-être que les projectiles entrent en collision avec le personnage. Pour éviter cela, il faut associer un Layer Bullet au prefab bullet et désactiver la collision entre le layer Player (le robot) et Bullet.
Allez dans Edit > Project Settings > Physics 2D . Dans la Collision Matrix , désactivez la case de collision entre Player et Bullet. En mode Play, vous devriez maintenant observer que le personnage tire des projectiles sans collision avec lui-même, et que les projectiles se déplacent avec une belle traînée visuelle.
Maintenant que la mécanique de tir est en place, nous allons nous concentrer sur l’animation du personnage lorsqu’il tire. Cela inclura une animation de tir qui se déclenche dès que le joueur appuie sur la touche de tir.
Formez-vous gratuitement avec Alphorm !
Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui.
FAQ
Comment coder le tir d'un projectile dans Unity?
Comment animer un projectile dans Unity?
Quelle est l'importance de la physique dans le tir de projectiles?
Comment éviter les collisions entre le personnage et ses projectiles?
Comment réguler la cadence de tir dans Unity?
Conclusion
En conclusion, maîtriser la mécanique de tir de projectiles dans Unity peut transformer l’expérience de jeu. Quelle autre fonctionnalité aimeriez-vous explorer pour dynamiser votre projet Unity?