Ralenti
Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 34 sur 56.
Une valeur de Time.timeScale comprise entre 0 et 1 correspond au ralenti. À 0.25, Time.deltaTime vaut un quart du temps réel d’une image, donc une voiture déplacée par speed * Time.deltaTime parcourt un quart de sa distance chaque seconde réelle, les Rigidbodies volent et tombent à un quart de leur vitesse, et WaitForSeconds(1f) dure 4 secondes réelles. Au-dessus de 1, le jeu tourne plus vite : 2 correspond à une vitesse double.
La physique nécessite une ligne supplémentaire. Chaque étape physique fait toujours avancer le jeu de Time.fixedDeltaTime, soit 0.02 seconde de temps de jeu, et à 0.25, ces étapes prennent 0.08 seconde réelle : FixedUpdate() ne s’exécute que 12.5 fois par seconde réelle, les corps ne bougent donc que toutes les cinq images et saccadent. Réduis le pas dans la même proportion, puis rétablis les deux valeurs ensuite, car Unity ne réinitialise jamais fixedDeltaTime de lui-même. Ce script ralentit le jeu tant que la touche Espace est maintenue :
float normalStep;
void Awake()
{
normalStep = Time.fixedDeltaTime; // 0.02 dans un nouveau projet
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Time.timeScale = 0.25f;
Time.fixedDeltaTime = normalStep * Time.timeScale;
}
if (Input.GetKeyUp(KeyCode.Space))
{
Time.timeScale = 1f;
Time.fixedDeltaTime = normalStep;
}
}Avec le pas réduit, la physique s’effectue toujours 50 fois par seconde réelle et chaque étape couvre un quart du temps de jeu, le ralenti reste donc fluide. Le pas est exprimé en secondes de jeu, donc le code de FixedUpdate() qui utilise Time.deltaTime continue de fonctionner sans changement.
Défi
MoyenUne comète traverse le ciel, et Space la lance depuis la gauche (Launcher.cs, prêt). En chemin, elle traverse la SlowZone, une boîte de déclenchement, et cette partie de son vol doit se dérouler au ralenti. Écris SlowZone.cs :
- Quand quelque chose entre dans la zone, le temps de jeu s’écoule à la vitesse
slowScale(0.4 dans l’Inspector), et le pas de physique est réduit dans la même proportion à partir de 0.02, afin que la comète continue de se déplacer en douceur. - Quand elle quitte la zone, le temps reprend sa vitesse normale et le pas de physique revient à 0.02.
Appuie sur Jouer, appuie sur Space et regarde la comète traverser la zone, puis Vérifier.
Essayez vous-même
using UnityEngine;
public class SlowZone : MonoBehaviour
{
public float slowScale = 0.4f;
// Ralenti tant que quelque chose se trouve dans la zone
}
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