Page 1 sur 1

amélioration de systeme de chrono

Publié : 26 Fév 2020 04:07
par Geek_Qc
J'ai fait un système de chrono qui fonctionne très bien mais je voulais juste savoir si c'étais possible d'améliorer le code (comme le rendre plus compacte)

voici le code:

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TimerScript : MonoBehaviour
{
    public GameObject timerUI;  //assingez a un text UI (pour aficher ou caché le chrono alors facultatif)
    public float timer = 0f;    //calcure par Time.DeltaTime
    public Text timeText;       //assingez a un text UI (pour modifier le text/temps)
    public int timerSecond;     //second du timer
    public int timerMinute;     //minute du timer

    void Update()
    {
        timer += Time.deltaTime;
    }

    void OnGameEnd()
    {
        timerUI.SetActive(true);
        timerSecond = (int)timer;
        timerMinute = (int)timerSecond / 60;
        timerSecond -= timerMinute * 60;

        if(timerMinute >= 10 && timerSecond >= 10) //11:11
        {
            timeText.text = "time: " + timerMinute + ":" + timerSecond.ToString ();
        }
        else if(timerMinute <= 9 && timerSecond <= 9) //01:01 OU 00:00
        {
            timeText.text = "time: 0" + timerMinute + ":" + "0" + timerSecond.ToString ();
        }
        else if(timerMinute <= 9 && timerSecond >= 10) //01:11 OU 00:11
        {
            timeText.text = "time: 0" + timerMinute + ":" + timerSecond.ToString ();
        }
        else if(timerMinute >= 10 && timerSecond <= 9) //11:01 OU 11:00
        {
            timeText.text = "time: " + timerMinute + ":" + "0" + timerSecond.ToString ();
        }
    }
}
les "1" représente une valeur supérieur a 0
les "0" représente une valeur égale a 0

vous pouvez parfaitement utiliser le scipt sans problème,vous avez juste à créer un chrono et l'assigné à la variable Text "timeText"

Re: amélioration de systeme de chrono

Publié : 26 Fév 2020 08:30
par djulio74
alors en effet je pense que cela est optimisable.

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TimerScript : MonoBehaviour
{
	public GameObject timerUI;  //assingez a un text UI (pour aficher ou caché le chrono alors facultatif)
	public float timer = 0f;    //calcure par Time.DeltaTime
	public string timeText;       //assingez a un text UI (pour modifier le text/temps)
	public int timerSecond;     //second du timer
	public int timerMinute;     //minute du timer

	void Update()
	{
		timer = Time.realtimeSinceStartup;
	
		timerSecond = (int)timer;
		timerMinute = (int)timerSecond / 60;
		timerSecond -= timerMinute * 60;

		timeText = "time: " + timerMinute.ToString("d2") + ":" + timerSecond.ToString ("d2");

	}
}
J'ai juste changé le Text par string, juste pour le test mais pas de soucis pour le faire avec ta version de Text.
en fait le "d2" du Tostring va indiquer que tu veux deux entier, donc même si timerMinute ou timerSecond <10, tu aura toujours un 0 devant.

et même une autre façon pour t'eviter un incrément du timer dans l'Update :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TimerScript : MonoBehaviour
{

	public float timer;    //calcure par Time.realtimeSinceStartup
	public string timeText;       //assingez a un string
	public int timerSecond;     //second du timer
	public int timerMinute;     //minute du timer


	// fonction a appeler au lancement d'une partie
	void OnGameStart(){
		// recupere le temps en seconde depuis le lancement de l'appli/standalone..
		timer = Time.realtimeSinceStartup;
	}

	// fonction a appeler a la fin de la partie/gameOver...
	void OnGameEnd()
	{
		// deduis au temps total depuis le lancement de l'appli le temps total au oment du debut de la partie
		timer = Time.realtimeSinceStartup - timer;
	
		timerSecond = (int)timer;
		timerMinute = (int)timerSecond / 60;
		timerSecond -= timerMinute * 60;

		// converti en string tes timer pour avoir toujour un nombre a deux chiffre
		timeText = "time: " + timerMinute.ToString("d2") + ":" + timerSecond.ToString ("d2");

	}
}

Re: amélioration de systeme de chrono

Publié : 26 Fév 2020 09:16
par boubouk50
L'update () est utile uniquement si tu affiches le temps sur ton chronomètre en temps réel, ce que tu ne fais pas, donc il est inutile.
Aussi, j'utiliserai plutôt une coroutine qu'un Update (). Ici, le timer est incrémenté ad vitam eternam, à moins de désactiver le script. Dans une coroutine tu as la main. L'update () est aussi plus gourmand. (il en faut tout de même des centaines pour voir une réelle différence)
Aujourd'hui, les compilateurs font beaucoup de travail d'optimisation pour nous, et tant mieux, mais d'antan il valait mieux faire une multiplication par l'inverse plutôt qu'une division. je ne sais pas si c'est encore vrai.
Quant aux conditions pour ajouter un 0 avant les nombres inférieurs à 10, il existe déjà un format pour cela.