Gestion Temps
Tu trouveras sur cette page :
Calculer le temps
Time.deltaTime
Il sāagit duĀ temps Ć©coulĆ© depuis la derniĆØre image. Logiquement, plus le nombre dāimages par seconde sera grand, et plus ce temps sera petit.
A quoi deltaTime peut bien servir?
Supposons que le joueur se dĆ©place Ć une certaine vitesse Ć chaque image, il sera forcĆ©ment bien plus rapide pour les ordinateurs qui sont plus puissants et tournent Ć 60 images par seconde, en comparaison Ć un ordinateur moins puissant qui tourne Ć 15 images par seconde. Nous, on prĆ©fĆØre que tous les joueurs se dĆ©placent Ć la mĆŖme vitesse peu importe le nombre de fps!Ā
Pour Ć©viter que la vitesse du joueur dĆ©pende de la puissance de lāordinateur, on va utiliser Time.deltaTime. Comme il sāagit du temps Ć©coulĆ© depuis la derniĆØre image. Plus le nombre dāimages par seconde sera grand, et plus ce temps sera petit. On peut donc lāutiliser pour uniformiser la vitesse:Ā
transform.Translate(direction * vitesse * Time.deltaTime) |
Ici, direction est un vecteur vers lequel se diriger et vitesse est un float qui dĆ©finit la vitesse quāon veut donner au joueur.
Creer des timers
Script de Timer
Avec un simple script on peut crĆ©er des timers ultra facilement et rĆ©-utilisable dans n’importe quel autre script!
Il suffit de mettre ce script ci sur un objet du niveau (unique, un objet qui sert de gestionnaire de temps) et c’est parti!
On peut utiliser ainsi ce script pour crĆ©er des temps d’attentes, des chronomĆØtres qui dĆ©clenches des choses quand ils se finissent, etc.
using UnityEngine;using System;using System.Collections.Generic;public class Timers : MonoBehaviour{  // Liste qui contient tous les timers actifs  public static List<Timer> timers = new List<Timer>();  private void Update() {    // Boucle pour retirer les timers terminés    foreach (Timer timer in timers) {      timer.Update(Time.deltaTime);//met é jour les timers      if (timer.fini)        timers.Remove(timer);        break; //pour eviter un message d'erreur dans la liste    }  }  // fonction pour démarrer un nouveau timer, peut etre utilisée depuis n'importe quel script avec ce code:  // Timers.StartTimer(TEMPS ICI, FONCTION ICI);  public static void StartTimer(float duree, Action action) {    timers.Add(new Timer(duree, action));  }  // Classe interne qui représente un timer individuel  public class Timer  {    private float duree;    // Durée totale du timer    private float tempsecoule;  // Temps écoulé depuis le démarrage du timer    private Action action;   // Action é exécuter lorsque le timer se termine    public bool fini;// Indique si le timer est terminé    public Timer(float duration, Action callback) { //quand on génére un timer, on copie les chiffres donnés dans ses propres propriétés      this.duree = duration;      this.action = callback;      tempsecoule = 0f;      fini = false;    }    //et on fait tourner le timer    public void Update(float deltaTime) {      if (fini)        return;      tempsecoule += deltaTime;      //si il est fini, il lance l'action qui é été attaché      if (tempsecoule >= duree) {        action?.Invoke();        fini = true;      }    }  }}BouclierTimer (Désactiver un Pouvoir après un laps de temps)
Dans cet exemple, je vais ramasser un objet bonus qui active un Pouvoir limitĆ© dans le temps.Ā
En premier lieu je crĆ©e lāobjet bonus sur la scĆØne Ć ramasser. Je vais lui donner un tag, un box collider (avec IsTrigge cocher). Je vais Ć©galement crĆ©er mon pouvoir. Dans mon cas, il sāagira dāun bouclier. Je crĆ©e mon bouclier un 2D Object > Sprite > Cercle entant quāenfant de mon HĆ©ros, par dĆ©faut je vais le rendre Inactif au le dĆ©but du jeu.Ā
Je vais maintenant créer un nouveau script à donner au Héros. On va commencer par ramasser le bonus et activer le Pouvoir
public string cible; // Ć renseigner dans lāinspector public GameObject Pouvoir; // glisser lāobjet Pouvoir private void OnTriggerEnter2D(Collider2D collision) { if(collision.tag == cible) { Destroy(collision.gameObject); //dĆ©truire le bonus Pouvoir.SetActive(true); // activer le pouvoir } } public void ArretPouvoir(){ Pouvoir.SetActive(false); // desactiver le pouvoir }Puis on crĆ©e le chrono qui arrive Ć Zero et arretera le pouvoir:
|
|
Et pour finir on va dƩsactiver le Pouvoir au dƩmarrage du jeu et donner du temps au chrono
public string cible; // Ć renseigner dans lāinspector public GameObject Pouvoir; // glisser lāobjet Pouvoir private void Start() { Pouvoir.SetActive(false); // inactiver le pouvoir chrono = Timer; // attribuer le temps dĆ©finir au chrono } private void OnTriggerEnter2D(Collider2D collision) { if(collision.tag == cible) { Destroy(collision.gameObject); //dĆ©truire le bonus Pouvoir.SetActive(true); // activer le pouvoir Timers.StartTimer(5f, ArretPouvoir); } } public void ArretPouvoir(){ Pouvoir.SetActive(false); // desactiver le pouvoir } |
Si il sāagit dāun bouclier nāoublies pas de lui donner Circle Collider 2D et le Script qui DĆ©truit les cibles !
ChronomĆØtre
Tu peux retrouver une autre version du chronomètre, avec les scripts à copier-coller, si tu préfère les tutoriels écrit plutÓt que les vidéos ci-dessous:
GƩrer le dƩlai
Tu aimerais pouvoir dĆ©clencher du code aprĆØs un certain dĆ©lai? Ce guide est fait pour toi! Tu apprendras comment crĆ©er un dĆ©lai, rĆ©pĆ©ter le chronomĆØtre et inclure de lāalĆ©atoire!
DƩlai simple
Voici un script dāexemple avec tous les Ć©lĆ©ments qui te permettront de crĆ©er un dĆ©lai!Ā
Explication des variables
- public float delaiMaxĀ ā sert Ć dĆ©finir le temps dāattente en secondes. Comme cāest une variable publique, tu peux le modifier depuis lāinspecteur. Nāoublie pas de le changer dans lāinspecteur pour quāil ne soit pas Ć©gal Ć zĆ©ro! (sinon il est inutile)
- private float prochaineApparitionĀ ā variable qui va stocker le moment (en secondes) quāil faudra dĆ©passer pour dĆ©clencher le code!
Explication du Start
Sert Ć initialiser le prochain temps dāapparition (en secondes) en fonction du dĆ©lai indiquĆ© dans lāinspecteur.Ā
Explication de lāUpdate
Time.timeĀ est la variable qui indique le temps passĆ© depuis le dĆ©but du jeu (en seconde). On vĆ©rifie si ce temps dĆ©passe celui quāon a fixĆ© pour la prochaineApparition. Si cāest le cas, Ƨa dĆ©clenche le code Ć lāintĆ©rieur de la condition!
Redémarrer le chronomètre
Ajoute Ć ton script une fonction qui permet de redĆ©marrer le chrono.Ā Tout ce que fait cette fonction est de rĆ©pĆ©ter ce quāon a dĆ©jĆ Ć©crit dans la fonction Start.
Dāailleurs cāest pour cette raison que tu peux remplacer ce que tu as mis dans Start par un simple appel de la fonction RedemarrerLeChrono();
Dans la fonction Update, tu vas appeler RedemarrerLeChrono() Ć chaque fois que la condition est remplie.
Cela aura pour effet de faire redĆ©marrer le chronomĆØtre Ć chaque fois que le dĆ©lai est atteint. Le code que tu vas Ć©crire Ć lāintĆ©rieur de la condition ne sera exĆ©cutĆ© quāĆ intervalles rĆ©guliers.Ā
Redémarrer le chronomètre dans un délai aléatoire
Cāest trĆØs sympa dāavoir du code qui sāexĆ©cute rĆ©guliĆØrement comme une horloge, mais cāest souvent plus faire dāajouter de lāalĆ©atoire dedans! Ne pas prĆ©voir quand apparaĆ®tra le prochain obstacle est bien plus amusant pour le joueur! Pour cela, rien de plus simple: il faut juste modifier la fonction RedemarrerLeChrono() en y intĆ©grant un dĆ©lai alĆ©atoire.
BouclierTimer (Désactiver un Pouvoir après un laps de temps)
Dans cet exemple, je vais ramasser un objet bonus qui active un Pouvoir limitĆ© dans le temps.Ā
En premier lieu je crĆ©e lāobjet bonus sur la scĆØne Ć ramasser. Je vais lui donner un tag, un box collider (avec IsTrigge cocher). Je vais Ć©galement crĆ©er mon pouvoir. Dans mon cas, il sāagira dāun bouclier. Je crĆ©e mon bouclier un 2D Object > Sprite > Cercle entant quāenfant de mon HĆ©ros, par dĆ©faut je vais le rendre Inactif au le dĆ©but du jeu.Ā
Je vais maintenant créer un nouveau script à donner au Héros. On va commencer par ramasser le bonus et activer le Pouvoir
Voici une petite vidĆ©o qui tāexplique cela en dĆ©tail
Ā Ā publicĀ string cible; // Ć renseigner dans lāinspector |
Puis on crĆ©e le chrono qui arrive Ć ZĆ©ro arrĆŖtera le pouvoir, Ainsi que dĆ©finir le temps quāon veut dāactivation du pouvoir.
public int Timer = 10; // indiquer le temps désirer, par défaut à 10 |
Et on va commencer Ć retirer du temps au chrono dĆØs que le Pouvoir est actif.
Ā Ā voidĀ Update() |
Et pour finir on va dƩsactiver le Pouvoir au dƩmarrage du jeu et donner du temps au chrono
Ā Ā privateĀ voidĀ Start() |
