Menu
CoddyTech

Le parcours

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

Ce chapitre permet de créer un jeu de plateforme en 3D. Tu cours et sautes de plateforme flottante en plateforme flottante, montes sur une plateforme qui glisse, touches des points de contrôle pour qu’une chute ne te renvoie pas au début, ramasses des gemmes comptabilisées à l’écran, franchis la ligne d’arrivée pour passer au niveau suivant et essaies de battre ton meilleur temps. Le jeu comprend cinq scripts, présents dans le projet dès le début : Player, MovingPlatform, Checkpoint, Gem et FinishLine. Les quatre derniers sont vides pour le moment, et chaque leçon en complète un. Le joueur est un CharacterController dirigé par les actions du système Input System, et la caméra est son enfant : elle le suit donc sans script.

Un CharacterController se déplace de deux façons. Move(motion) le déplace d’une certaine distance sans rien ajouter ; la gravité, les sauts et Time.deltaTime sont donc à gérer par le script, comme dans le chapitre Character Controller. SimpleMove(speed) prend une vitesse en unités par seconde, la multiplie lui-même par le temps de la frame et ajoute la gravité ; il ignore la valeur y transmise, donc un personnage déplacé avec cette méthode tombe des rebords, mais ne peut jamais sauter. Ce chien de berger, dans un jeu de conduite de troupeau vu de dessus, n’a pas besoin de sauter : SimpleMove et l’action Move constituent donc tout son script :

using UnityEngine;
using UnityEngine.InputSystem;

public class Sheepdog : MonoBehaviour
{
    [SerializeField] private float speed = 6f;
    private CharacterController controller;
    private InputAction moveAction;

    void Start()
    {
        controller = GetComponent<CharacterController>();
        moveAction = InputSystem.actions.FindAction("Move");
    }

    void Update()
    {
        Vector2 input = moveAction.ReadValue<Vector2>();
        controller.SimpleMove(new Vector3(input.x, 0f, input.y) * speed);
    }
}

Le personnage du jeu de plateforme doit sauter : il conserve donc sa propre vitesse verticale et se déplace avec Move, en lisant les actions Move et Jump plutôt que la classe Input. Unity recommande un seul appel à Move ou SimpleMove par frame : la marche et la chute sont prises en compte dans le même appel, et isGrounded décrit alors l’ensemble de ce déplacement.

challenge icon

Défi

Moyen

Commence le jeu de plateforme avec le joueur. Le script Player possède speed (5), jumpHeight (1.5) et gravity (-9.81), le controller et une velocity pour la chute. Récupère une seule fois les actions Move et Jump, dans Start, puis dans Update :

  • Move fait avancer le joueur à une vitesse de speed unités par seconde : à droite et à gauche sur l’axe x, en avant et en arrière sur l’axe z.
  • La gravité ajoute gravity * Time.deltaTime à velocity.y à chaque image. Tant que le contrôleur est au sol et que velocity.y est inférieur à 0, définis d’abord velocity.y sur -2, pour que le joueur reste plaqué au sol.
  • À chaque pression sur Jump, si le joueur est au sol, définis velocity.y sur Mathf.Sqrt(jumpHeight * -2f * gravity) : le saut atteint une hauteur de jumpHeight unités. Maintenir Jump enfoncé ne déclenche qu’un seul saut, et il est impossible de sauter en plein vol.
  • Appelle controller.Move une seule fois, avec le déplacement et velocity combinés, multipliés par Time.deltaTime.

Appuie sur Play et saute jusqu’aux premières plateformes, puis clique sur Check.

Essayez vous-même

using UnityEngine;
using UnityEngine.InputSystem;

public class Player : MonoBehaviour
{
    [SerializeField] private float speed = 5f;
    [SerializeField] private float jumpHeight = 1.5f;
    [SerializeField] private float gravity = -9.81f;

    private CharacterController controller;
    private Vector3 velocity;

    void Start()
    {
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        // se déplacer avec l'action Move, sauter avec l'action Jump, tomber sous l'effet de la gravité
    }
}
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