Trois voies
Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 27 sur 60.
Ce chapitre permet de créer un jeu de course sans fin. Le personnage court sur une route à trois voies et change de voie pour éviter les obstacles qui arrivent vers lui. Au fil des prochaines leçons, la route accélère, la distance s’affiche à l’écran, une collision met fin à la course et un bouton permet de recommencer, puis le meilleur résultat est enregistré. Le personnage n’avance jamais : il reste à z = 0 et les obstacles se déplacent vers lui, de sorte que la route ne s’épuise jamais. Le jeu comporte quatre scripts, Runner, Spawner, Obstacle et GameManager, et les trois derniers sont vides pour le moment.
On ne dirige pas un personnage qui se déplace sur des voies comme une voiture : il se trouve toujours à l’un de quelques emplacements. Garde l’emplacement sous la forme d’un nombre entier, change ce nombre lorsqu’une touche est pressée et calcule la position à partir de celui-ci. La plateforme de ce laveur de vitres dessert les cinq étages d’un bâtiment, espacés de 3 unités :
[SerializeField] private float floorHeight = 3f;
[SerializeField] private float moveSpeed = 6f;
private int floor = 0;
void Update()
{
if (Input.GetKeyDown(KeyCode.UpArrow)) floor++;
if (Input.GetKeyDown(KeyCode.DownArrow)) floor--;
floor = Mathf.Clamp(floor, 0, 4);
Vector3 p = transform.position;
p.y = Mathf.MoveTowards(p.y, floor * floorHeight, moveSpeed * Time.deltaTime);
transform.position = p;
}GetKeyDown fait qu’une pression fait monter d’un étage, alors que GetKey ajouterait un étage à chaque image pendant laquelle la touche est maintenue enfoncée. Mathf.Clamp maintient le nombre dans les limites du bâtiment : appuyer sur la touche du haut depuis le dernier étage ne fait rien, et la pression suivante sur la touche du bas mène directement à l’étage 3. Mathf.MoveTowards fait glisser la plateforme vers son étage à la vitesse de moveSpeed unités par seconde et l’arrête exactement à cet étage, au lieu de l’y téléporter en une image. La position est copiée, modifiée puis réaffectée, car transform.position.y ne peut pas être défini séparément.
Défi
MoyenFais déplacer le coureur entre trois voies avec les flèches.
- Dans
Update()deRunner, décrémentelane--lorsque tu appuies surInput.GetKeyDown(KeyCode.LeftArrow)et incrémentelane++lorsque tu appuies sur la flèche droite. - Garde-le sur la route :
lane = Mathf.Clamp(lane, -1, 1);. - Copie
transform.positiondansp, déplacep.xverslane * laneWidthavecMathf.MoveTowardsà la vitesselaneSpeed * Time.deltaTime, puis réaffectep.
Appuie sur « Jouer », clique sur le jeu et change de voie : le coureur glisse d’une voie à l’autre. Puis clique sur « Vérifier ».
Essayez vous-même
using UnityEngine;
public class Runner : MonoBehaviour
{
public float laneWidth = 2.5f;
public float laneSpeed = 15f;
private int lane = 0; // -1 correspond à la voie de gauche, 0 à celle du milieu, 1 à celle de droite
void Update()
{
// Change de voie avec les flèches, puis glisse vers la coordonnée x de la voie
}
}
Toutes les leçons de Créer de vrais jeux
1Texte à l’écran
Canvas et texteAfficher le scoreFormater les nombresUn compte à reboursRécapitulatif : compteur de vitesse4Scènes et niveaux
Charger une scèneRedémarrer le niveauNiveau suivantConserver entre les scènesRécapitulatif : sélection du niveau2Boutons et écrans
Boutons et onClickLambdasRelier les éléments dans l’InspectorActiver et désactiver les panneauxBarres de santéRécapitulatif : boutique d’améliorations5Sauvegarder avec PlayerPrefs
Enregistrer un nombreCharger avec une valeur par défautMeilleur scoreEnregistrer les paramètresRécapitulatif : les pièces à la banque3Le gestionnaire du jeu
Un seul script gère le jeuLe SingletonLes états du jeuBasculer selon l’étatRécapitulatif : gestionnaire de manche6Projet : jeu de course sans fin
Trois voiesObstacles en vueEntraînez-vous par vous-même : Playground Unity