Menu
CoddyTech

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.

challenge icon

Défi

Moyen

Fais déplacer le coureur entre trois voies avec les flèches.

  1. Dans Update() de Runner, décrémente lane-- lorsque tu appuies sur Input.GetKeyDown(KeyCode.LeftArrow) et incrémente lane++ lorsque tu appuies sur la flèche droite.
  2. Garde-le sur la route : lane = Mathf.Clamp(lane, -1, 1);.
  3. Copie transform.position dans p, déplace p.x vers lane * laneWidth avec Mathf.MoveTowards à la vitesse laneSpeed * Time.deltaTime, puis réaffecte p.

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

Entraînez-vous par vous-même : Playground Unity