dimanche 10 août 2014

Timer.js, un script pour les gouverner tous


Hello tout le monde !

Un billet bien différent de d'habitude aujourd'hui avec un cadeau pour les codeurs qui utilisent Unity.

C'est quoi ?! C'est quoi ?!!!


C'est le script que j'utilise pour gérer tous mes timers, que ce soit pour du fading de trucs divers (musique, transparence d'une image, etc...), pour les cooldowns des sorts, pour les animations de mes personnages, etc...

Ça fait longtemps que je l'utilise et depuis l'horrible première version qui utilisait des numéros d'identification pour désigner les différents timers (genre, timer[0] = le timer de l'animation de marche => bonne chance pour s'y retrouver dans votre code quand vous gérez 30 timers différents^^), ce script a fini par devenir vraiment simple d'utilisation et rudement efficace.

Du coup je me suis dit que ça pourrait en intéresser certains. C'est cadeau !

Les fonctions à connaitre



InitializeTimer(name:String)

Démarre un timer

Cooldown(name:String, timeToWait:float) : boolean

Permet de voir si timeToWait (en secondes) s'est écoulé depuis le lancement du timer

Countdown(name:String, timeToWait:float) : float

Pareil mais renvoie le temps restant (en secondes)

SafeCooldown(name:String, timeToWait:float) : boolean

Idem que Cooldown mais, contrairement à celui-ci, renvoie false si le timer n'a pas été initialisé avant

Utilisation concrète



Vous allez voir que c'est simple comme tout à utiliser, en général je n'utilise que les deux premières fonctions.

La première étape c'est de lier le script à un GameObject et de le déclarer dans le script qui doit l'utiliser. Attention que les timers sont donc partagés dans un même gameObject. Donc si deux scripts présents sur un seul gameObject l'utilisent, attention à ne pas donner deux fois le même nom à deux timers différents.

Ensuite c'est très simple. En fait InitializeTimer() n'est pas vraiment utilisé pour initialiser un timer (en général !) mais plutôt pour le réinitialiser.

On va donc tout de suite partir sur notre fonction Cooldown(). Imaginons qu'on veuille faire une animation de marche ou d'attaque en deux frames.


Rien de plus simple ! On va travailler dans la fonction Update() de notre script de déplacements.

Cliquez sur l'image pour la voir en grand

Et voilà, c'est aussi simple que ça !

Pourquoi on initialise pas le timer avant de l'utiliser ?

En fait, la première fois qu'on va appuyer sur la touche de déplacement, la fonction Cooldown va se rendre compte qu'on a pas initialisé notre timer. Elle va donc renvoyer true, notre animation de marche va se lancer puis on initialise le timer.

Le fait qu'on ne l'ait pas initialisé avant d’appeler Cooldown va simplement faire que dès l'appui sur la touche, l'image du perso va changer.

Parfois, vous voudrez peut-être éviter ça (pour éviter qu'une bombe explose dès que vous la posez par exemple^^). Dans ce cas il suffit d'utiliser SafeCooldown() ou bien d'Initialiser le timer avant d’appeler Cooldown().

Conclusion et download



Voilà voilà, j'espère que j'ai correctement expliqué tout ça. Retenez surtout l'utilisation concrète, c'est ça que j'utilise dans 99% du temps, le reste est assez peu utilisé mais c'est utile de savoir que c'est là pour le jour où vous en avez besoin^^.


Vous pouvez l'utiliser dans tous types de projets (commerciaux ou non), le modifier, le redistribuer, etc... Vous pouvez me citer dans les crédits de votre jeu si vous voulez mais vous n'êtes pas obligés.

(N'hésitez pas à laisser un commentaire si le lien vient à mourir).