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,这只是不好看
无需计算所有这些时间属性。记录某事开始的时间要容易得多:
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)
请参阅此处了解如何指定自己的格式字符串。