如何在回到 0 之前停止显示 60 的秒数

Gen*_*zou 1 c# unity-game-engine

我正在尝试在播放器的 UI 中显示时间,但我似乎无法停止显示 60 的秒数,然后再返回 0。我认为它会在显示任何内容之前先执行 if 语句中的所有操作,但事实并非如此。似乎是这样。这是我的代码:

private void Update() {

    seconds += timeMultiplier * Time.deltaTime;

    if (seconds >= 60) {
        seconds -= 60;
        minutes += 1;
    } else if (minutes >= 60) {
        minutes -= 60;
        hours += 1;
    } else if (hours >= 24) {
        hours -= 24;
        days += 1;
    } else if (days >= 7) {
        days -= 7;
        weeks += 1;
    } else if (weeks >= 52.17857f) {
        weeks -= 52.17857f;
        years += 1;
    }

}

public string DisplayTimeInformation() {
    StringBuilder builder = new StringBuilder();

    builder.Append(hours.ToString("#00")).Append(":").Append(minutes.ToString("#00"));

    if (displaySeconds) {
        builder.Append(":").Append(seconds.ToString("#00")).Append(" ");
    } else {
        builder.Append(" ");
    }

    return builder.ToString();
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用displayedSeconds与正常seconds变量相同的秒并将其钳位到 59,尽管它在技术上仍然准确,但它会在 59 上徘徊一段时间,然后在恢复正常之前从 00 加速到 01,这只是不好看

Dav*_*idG 5

无需计算所有这些时间属性。记录某事开始的时间要容易得多:

var startedOn = DateTime.Now;
Run Code Online (Sandbox Code Playgroud)

然后每次显示持续时间时:

var difference = DateTime.Now - startedOn;
Run Code Online (Sandbox Code Playgroud)

这为您提供了一个TimeSpan可以轻松显示的漂亮对象:

var timeInString = difference.ToString(@"hh\:mm\:ss");
Run Code Online (Sandbox Code Playgroud)

请参阅此处了解如何指定自己的格式字符串。