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.
Défi
MoyenUn 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. freezeTimesecondes 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
}
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