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.
Défi
MoyenCommence 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
speedunité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 quevelocity.yest inférieur à 0, définis d’abordvelocity.ysur -2, pour que le joueur reste plaqué au sol. - À chaque pression sur Jump, si le joueur est au sol, définis
velocity.ysurMathf.Sqrt(jumpHeight * -2f * gravity): le saut atteint une hauteur dejumpHeightunités. Maintenir Jump enfoncé ne déclenche qu’un seul saut, et il est impossible de sauter en plein vol. - Appelle
controller.Moveune seule fois, avec le déplacement etvelocitycombinés, multipliés parTime.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é
}
}
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
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 niveau7Contrôle du temps
Mettre en pause avec timeScaleRalentiTemps non mis à l’échelleRécapitulatif : Bullet Time10Projet : jeu de plateforme en 3D
Le parcoursPlateformes mobiles2Boutons 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 banque