Некорректное увеличение таймера в Unity - PullRequest
0 голосов
/ 27 июня 2019

У меня есть код ниже для простого интерфейса таймера в Unity. Я пытаюсь принудительно обновить таймер с шагом 0,01 секунды, а затем выполнить сброс на 8 секунд. При воспроизведении сценария я вижу увеличение таймера на 0,011 секунды. В самом единстве я установил Fixed Timestep = 0,01. Почему это идет не так?

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

public class UI_Time : MonoBehaviour {

    public Text uiText;
    private int curStep = 0;
    private double timer = Variables.timer;


    // Trying fixed update as an attempted workaround
    void FixedUpdate()
    {
        timer += Time.fixedDeltaTime;

        if (timer > 8)
            {
                timer = 0d;
            }
        else
        {
            uiText.text = "Time: " + timer.ToString(".0##");  //Set the text field
        }

    }
}

1 Ответ

3 голосов
/ 27 июня 2019

FixedUpdate фактически используется только для физики, и вы не должны изменять его интервалы для того, что вы хотите сделать ...

скорее используйте Update и Time.deltaTime, если это возможно. Даже в FixedUpdate рекомендуется использовать Time.deltaTime (см. Time.fixedDeltaTime)


В вашем случае, однако, для приращения точных временных шагов вы можете рассмотреть сопрограмму с WaitForSeconds (или, возможно, WaitForSecondsRealtime) типа

using System.Collections;

//...

private void Start()
{
    StartCoroutine(RunTimer());
}

private IEnumerator RunTimer()
{
    var time = 0f;
    uiText.text = "Time: " + time.ToString("#.0##");

    // looks scary but is okey in a coroutine as long as you yield somewhere inside
    while(true)
    {
        // yield return makes the routine pause here
        // allow Unity to render this frame
        // and continue from here in the next frame
        //
        // WaitForSeconds .. does what the name says
        yield return new WaitForSeconds(0.01f);

        time += 0.01f;
        uiText.text = "Time: " + time.ToString("#.0##");
    }
}

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...