Le parcours
Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 49 sur 60.
Ce chapitre permet de créer un jeu de plateforme en 3D. Tu cours et sautes de plateforme flottante en plateforme flottante, tu en chevauches une qui glisse, tu touches des points de contrôle pour qu’une chute ne te renvoie pas au départ, tu ramasses des gemmes dont le nombre s’affiche à l’écran, tu franchis la ligne d’arrivée pour passer au niveau suivant et tu 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 l’instant, et chaque leçon en remplit un. Le joueur est un CharacterController dirigé par les actions de l’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 dans le script, comme dans le chapitre sur le Character Controller. SimpleMove(speed) prend une vitesse en unités par seconde, la multiplie lui-même par le temps écoulé pendant la frame et ajoute la gravité ; il ignore la valeur y que tu lui transmets, 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 rassemblement 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 joueur du jeu de plateforme doit pouvoir sauter ; il conserve donc sa propre vitesse verticale et se déplace avec Move, en lisant les actions Move et Jump au lieu d’utiliser 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 ce déplacement dans son ensemble.
Défi
MoyenFais marcher, sauter et tomber le personnage.
- Dans
Start(), trouveMoveetJumpavecInputSystem.actions.FindAction. - Dans
Update(), fais-le marcher à la vitessespeed: déplace x de Move sur x, et son y sur z. - Ajoute
gravity * Time.deltaTimeàvelocity.y, et-2florsqu’il est au sol et tombe. Lorsqu’il est au sol, le saut définit cette valeur surMathf.Sqrt(jumpHeight * -2f * gravity). - Appelle
controller.Move((move + velocity) * Time.deltaTime)une seule fois.
Appuie sur « Jouer » : saute jusqu’à la première plateforme. Puis appuie sur « Vérifier ».
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é
}
}
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 : plateforme 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 banqueEntraînez-vous par vous-même : Playground Unity