Timer обратный счет C#

Привет я делаю игру в Unity у какового должен быть хронометр, который начинается в 60, когда он прибудет к 30, будь должен менять цвет букв в красный, и когда он прибывает к 0, будь должен начинать увеличиваться и не переходить в негатив до настоящего времени принесло начальный подсчет, но мне не удается сделать вторую часть, что хронометр возвратился.

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

 public class Timmer : MonoBehaviour {

     public Text Tempo; 
     public float tiempo = 0.0f;



     // Update is called once per frame
     void Update () {
         tiempo -= Time.deltaTime;
         Tempo.text = "Tiempo:" + " " + tiempo.ToString ("f0");

     }
 }
2
задан 02.08.2016, 17:06
2 ответа

Я не работаю с таким непрерывным Unity, но ты можешь осуществлять такое неопределенное решение как следующая:

public class Timmer : MonoBehaviour 
{
    public Text Tempo;
    public float Tiempo = 0.0f;
    public bool DebeAumentar = false;

    void Update() 
    {
        if (DebeAumentar) 
            Tiempo += Time.deltaTime; 
            // Primero se comprueba que sea falso el tener que aumentar.
        else 
        {
            if (Tiempo <= 0.0f)  // Comprueba si es menor o igual a cero.
            { DebeAumentar = true; } // Para volver true a este.
            else 
            { Tiempo -= Time.deltaTime; } // De lo contrario, sigue bajando.
        }
        if (Tiempo <= 30.0f) 
        { Tempo.color = Color.Red; } // Comprueba para cambiar el color del text. 
        else { Tempo.color = Color.Green; } // Vuelve a verde cuando aumente...

        Tempo.text = "Tiempo:" + " " + Tiempo.ToString ("f0");
    }
}

Для немного простого дебета функционировать, также возможно улучшать код, будь хорошо объяснен в комментариях.

EDIT: Я сделал маленький прогресс в коде, чтобы улучшать Вашу читабельность, но не знаю, ли будет он совместим с твоей версией C#, это протестировал в C#6:

public class Timmer : MonoBehaviour
{
    public Text Tempo;
    public float Tiempo = 0.0f;
    public bool DebeAumentar = false;

    void Update()
    {
        // Se comprueba si debe aumentar el valor primero...
        DebeAumentar = (Tiempo <= 0.0f)  ? true : false;

        // Luego se efectua el aumento.
        if (DebeAumentar) Tiempo += Time.deltaTime;
        else Tiempo -= Time.deltaTime;

        // Se asigna el color dependiendo del tiempo restante.
        Tempo.color  = (Tiempo <= 30.0f) ? Color.Red : Color.Green;

        Tempo.text = "Tiempo:" + " " + Tiempo.ToString ("f0");
    }
}

Оно было бы должно функционировать равной или лучшей формы.

Я должен использовать тройной оператор в этом втором осуществлении и он представлен следующей формы:

Var = (Condición) ? (Si cumple la condición, se asigna este valor) : (De lo contrario, este);

Это что-то подобное "Условному ассигнованию". Я надеюсь, что он помогает.

5
ответ дан 24.11.2019, 13:44

Шрифт: Простой timer

public class Countdown: MonoBehaviour {
     public int duration = 60;
     public int timeRemaining;
     public bool isCountingDown = false;
     public void Begin()
     {
         if (!isCountingDown) {
             isCountingDown = true;
             timeRemaining = duration;
             Invoke ( "_tick", 1f );
         }
     }

     private void _tick() {
         timeRemaining--;
         if(timeRemaining > 0) {
             Invoke ( "_tick", 1f );
         } else {
             isCountingDown = false;
         }
     }
 }
0
ответ дан 24.11.2019, 13:44