Menu
CoddyTech

Temps non mis à l’échelle

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

Un jeu en pause ou ralenti a tout de même besoin d’une horloge réelle pour certaines choses : un menu pause avec des animations, un compte à rebours avant la reprise du jeu, un gel qui doit se terminer de lui-même. Time.unscaledDeltaTime correspond au temps réel écoulé depuis la dernière image, quelle que soit la valeur de Time.timeScale, et Time.unscaledTime correspond au temps réel écoulé depuis le début du jeu. Ce menu pause fait tourner sa roue de chargement en temps réel, donc la roue tourne même lorsque le jeu est en pause :

void Update()
{
    wheel.Rotate(0f, 0f, -180f * Time.unscaledDeltaTime);   // un demi-tour par seconde, que le jeu soit en pause ou non
}

Les coroutines ont la même paire. WaitForSeconds compte le temps de jeu, donc avec Time.timeScale = 0, il ne se termine jamais ; WaitForSecondsRealtime compte les secondes réelles. Lancée à l’ouverture du menu, cette coroutine fait clignoter le titre du menu toutes les demi-secondes :

IEnumerator Blink()
{
    while (true)
    {
        title.SetActive(!title.activeSelf);
        yield return new WaitForSecondsRealtime(0.5f);
    }
}

Utilise les valeurs mises à l’échelle pour le gameplay, qui doit s’arrêter lorsque le jeu s’arrête, et les valeurs non mises à l’échelle pour ce qui doit continuer pendant une pause ou un ralentissement : les menus, leurs animations et les minuteurs qui mettent fin à une pause. Invoke n’a pas de version en temps réel : il compte toujours le temps de jeu.

challenge icon

Défi

Moyen

Un hit stop donne du poids à un coup puissant : tout le jeu se fige un instant à l’impact. Les flèches déplacent le dispositif de largage et la barre d’espace en fait tomber une enclume (Dropper.cs, déjà prêt). Écris Anvil.cs, que chaque enclume transporte :

  • Quand l’enclume percute quelque chose, fige le jeu : Time.timeScale à 0.
  • freezeTime secondes réelles plus tard (0.3 dans l’Inspector), remets-le à 1.

Clique sur Play, fais tomber quelques enclumes, puis clique sur Check.

Essayez vous-même

using System.Collections;
using UnityEngine;

public class Anvil : MonoBehaviour
{
    public float freezeTime = 0.3f;

    // Figer le jeu pendant freezeTime secondes réelles lorsque l'enclume heurte quelque chose
}
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