简体   繁体   中英

How to save in Unity the time obtained in the game timer with C #?

I have created a timer for my game and I want to save the lower time in a Variable that is displayed on the screen. I want to show on the screen the shortest time achieved, when a shorter time is achieved, replace, (overwritten) the time that was up to that moment. So far I have managed to show the time that is passing and a text to show the "Record" that only shows "00:00" since I don't know how to join my code.

The stopwatch works and restarts every time a new game starts, but I cannot save the time achieved How do I get the shortest time achieved to be displayed, removing from the screen the time achieved so far with my code?

I have the Clock code, but when I add the function to save the time it breaks the game. However, creating a clean new project does work.

I show the code If I've used PlayerPrefs, forget that code snippet. but as I say, I don't know how to link it to my relog. I add the missing code

Test code to save Record time

 public class LogicaPuntuaje : MonoBehaviour
{
  public Text textoPuntaje;
  public int numPuntaje;

  public Text textoRecord;

  void Start()
  {
    numPuntaje = 0;
    textoRecord.text = PlayerPrefs.GetInt("PuntajeRecord", 0).ToString();
  }

  void Update()
  {

  }

  // boton para crear puntos al hazar que yo no necesito
  public void PuntajeAlAzaro()
  {
    numPuntaje = Random.Range(0, 11);
    textoPuntaje.text = numPuntaje.ToString();

    if (numPuntaje > PlayerPrefs.GetInt("PuntajeRecord", 0))
    {
      PlayerPrefs.SetInt("PuntajeRecord", numPuntaje);
      textoRecord.text = numPuntaje.ToString();
    }
  }

  //funcion para borrar los datos del record

  public void BorrarDatos()
  {
      PlayerPrefs.DeleteKey("PuntajeRecord");
      textoRecord.text = "00:00";
  }
}

    }

My stopwatch code, Reloj.cs

public class Reloj : MonoBehaviour
{
  [Tooltip("Tiempo inicial")]
  public int tiempoInicial;

  [Tooltip("Escala de tiempo del relog")]
  [Range(-10.0f, 10.0f)]
  public float escalaDeTiempo = 1;


  private Text myText;
  private float tiempoDelFrameConTimeScale = 0f;
  private float tiempoAMostrarEnSegundos = 0f;
  private float escalaDeTiempoAlPausar, escalaDeTiempoInicial;
  private bool estaPausado = false;


  void Start()
  {
    // set the timeline
    escalaDeTiempoInicial = escalaDeTiempo;

    myText = GetComponent<Text>();

    // we start the variable
    tiempoAMostrarEnSegundos = tiempoInicial;

    ActualizarRelog(tiempoInicial);

  }

  // Update is called once per frame
  void Update()
  {
    if (!estaPausado)
    {
      // the following represents the time of each frame considered the time scale
      tiempoDelFrameConTimeScale = Time.deltaTime * escalaDeTiempo;

      // the following variable accumulates the elapsed time to show it in the Relog
      tiempoAMostrarEnSegundos += tiempoDelFrameConTimeScale;
      ActualizarRelog(tiempoAMostrarEnSegundos);
    }
  }

  public void ActualizarRelog(float tiempoEnSegundos)
  {
    int minutos = 0;
    int segundos = 0;
    string textoDelReloj;

    // ensure that the time is not negative
    if (tiempoEnSegundos <= 0) tiempoEnSegundos = 0;

    // calculate seconds and minutes
    minutos = (int)tiempoEnSegundos / 60;
    tiempoEnSegundos = (int)tiempoEnSegundos % 60;

    // create the string of digital characters that form the relog
    textoDelReloj = minutos.ToString("00") + ':' + tiempoEnSegundos.ToString("00");

    // update UI text element with character string
    myText.text = textoDelReloj;
  }

  public void Pausar()
  {
    if (!estaPausado)
    {
      estaPausado = true;
      escalaDeTiempoAlPausar = escalaDeTiempo;
      escalaDeTiempo = 0;
    }
  }
}
    // here is the solution:
    float currentTime; // your current timer (without logic)
    float highscore = 99999; // set it to a really high value by default
    void start()
    {
       highscore = PlayerPrefs.GetFloat("best"); // get your previous highscore
    }
    //on level completed:
    {
        if(currentTime <= highscore //your best time
        {
           highscore = currentTime;
           PlayerPrefs.SetFloat("best", highscore); // save your score
        }
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM