Menu
CoddyTech

Trois voies

Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 27 sur 56.

Ce chapitre permet de créer un jeu de course sans fin. Un coureur dévale 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 avec un bouton pour rejouer, et le meilleur résultat est sauvegardé. Le coureur n’avance jamais : il reste à z = 0 et les obstacles se déplacent vers lui, de sorte que la route ne s’arrête jamais. Le jeu comporte quatre scripts, Runner, Spawner, Obstacle et GameManager, et les trois derniers sont vides pour l’instant.

Un coureur qui se déplace sur des voies ne se pilote pas 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 quand une touche est pressée et déduis-en la position. 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 monter d’un étage à chaque pression, alors que GetKey ferait monter d’un étage à chaque image tant que la touche est maintenue. Mathf.Clamp maintient le nombre dans les limites du bâtiment : ainsi, appuyer sur la touche vers le haut à l’étage supérieur ne fait rien, et la pression suivante sur la touche vers le 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 faire sauter en une seule image. La position est copiée, modifiée, puis réaffectée, car on ne peut pas définir séparément transform.position.y.

challenge icon

Défi

Moyen

Démarre l’Endless Runner avec le coureur. Dans l’Inspector, attribue à Runner une laneWidth de 2.5 et une laneSpeed de 15, et lane vaut -1 pour la voie de gauche, 0 pour celle du milieu et 1 pour celle de droite. Dans Update() de Runner :

  • Chaque pression sur la flèche gauche ou droite modifie lane de un dans cette direction. Maintenir la touche enfoncée ne le modifie toujours que de un.
  • lane ne descend jamais en dessous de -1 ni ne dépasse 1.
  • Le coureur glisse le long de x jusqu’à lane * laneWidth à une vitesse de laneSpeed unités par seconde, et conserve ses valeurs y et z.

Laisse les trois autres scripts tels quels pour l’instant. Appuie sur Play, clique sur le jeu et change de voie, puis clique sur Check.

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
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Créer de vrais jeux