Menu
CoddyTech

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.

challenge icon

Défi

Moyen

Une 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
}
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