Champ de tir au canon
Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 61 sur 63.
Un canon se trouve à une extrémité d’un champ de tir, et trois cibles glissent d’un côté à l’autre du champ à différentes distances. Incline le canon vers le haut ou vers le bas pour atteindre chaque distance, et synchronise chaque tir pour qu’il parte au moment où une cible traverse la ligne de tir. Une balle qui touche une cible la met hors jeu et est consommée ; tout autre objet qui heurte une cible la laisse intacte. Les cibles sont des corps cinématiques : les impacts ne les poussent donc jamais, et le canon dispose de cinq balles.
Écris deux scripts : Cannon sur le canon et Target sur chaque cible.
Défi
DifficileL’Inspector donne à Cannon ballPrefab (un Rigidbody : le prefab Ball, de masse 2, avec le tag Ball), angle (30), turnSpeed (40), power (30) et balls (5).
- La flèche vers le haut augmente
angleet la flèche vers le bas le diminue, à raison deturnSpeeddegrés par seconde, sans jamais descendre sous 10 ni dépasser 60. À chaque image, définis la rotation du canon surQuaternion.Euler(-angle, 0, 0): dans Unity, un angle x positif incline l’avant vers le bas, donc le signe moins l’incline vers le haut. - La barre d’espace tire une balle tant que
ballsest supérieur à 0 : fais-la apparaître à 1 unité devant le centre du canon, dans l’axe du canon, propulse-la avec une impulsion depowerdans l’axe du canon, retire 1 àballset affiche le nombre restant, commeBalls left: 4. S’il ne reste aucune balle, la barre d’espace ne fait rien.
Chaque cible possède un Rigidbody cinématique, et l’Inspector donne à Target les valeurs speed et range (2 et 3 pour Target1).
- À chaque étape physique, déplace la cible le long de l’axe x avec
MovePositionà une vitesse despeedunités par seconde, et fais-la repartir dans l’autre sens dès qu’elle s’éloigne derangeunités de son point de départ. - Lorsqu’une balle (avec le tag
Ball) touche la cible, affiche le nom de la cible ethit!, commeTarget2 hit!, puis détruis à la fois la cible et la balle. Tout ce qui n’est pas une balle la laisse intacte.
Appuie sur Play et élimine les trois cibles, puis clique sur Check.
Essayez vous-même
using UnityEngine;
public class Cannon : MonoBehaviour
{
[SerializeField] private Rigidbody ballPrefab;
[SerializeField] private float angle = 30f;
[SerializeField] private float turnSpeed = 40f;
[SerializeField] private float power = 30f;
[SerializeField] private int balls = 5;
void Update()
{
// Visez avec les flèches haut et bas, tirez avec Space
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Physique et gameplay
1Corps rigide
Gravité et massePousser avec AddForceSauter avec une impulsionFixedUpdate pour la physiqueVitesseCorps cinématiquesRécapitulatif : plateforme de lancement4Coroutines
InvoquerInvokeRepeating, CancelInvokeVotre première coroutineBoucles dans les coroutinesArrêter les coroutinesRécapitulatif : compte à rebours2Collisions
OnCollisionEnterQu’est-ce que j’ai touché ?Se briser à l’impactRester au solRebond et frictionFormes des collidersRécapitulatif : mur destructible5Projet : Course aux pièces
La balle roulanteDes pièces à ramasser