【发布时间】:2015-02-25 04:18:24
【问题描述】:
我创建了一个简单的 GUI 进度条,它从 0px 开始并扩展到 640px。它工作得很好,但看起来有点紧张。我可以忍受它,但如果我能让它看起来更平滑,那将是理想的。
有什么建议吗?
IEnumerator Timer() {
DateTime start = DateTime.Now;
while (true) {
float tick = (float)DateTime.Now.Subtract(start).TotalSeconds;
Debug.Log("TimeInSeconds: " + (int)tick);
rawImageRectTransform.sizeDelta = new Vector2(tick / 60f * 640f, 10f);
if (tick > 60f) {
break;
}
yield return null;
}
}
更新:
根据建议,我尝试了以下,效果是一样的。
rawImageRectTransform.sizeDelta = Vector2.Lerp(new Vector2(0, 10f), new Vector2(640f, 10f), tick/60f);
我也试过这样:
rawImageRectTransform.sizeDelta = Vector2.Lerp(new Vector2(0, 10f), new Vector2(640f, 10f), Time.fixedTime/60f);
效果是一样的,但是进度条没有同步到DateTime.TotalSeconds(即tick)值,所以这不起作用。
【问题讨论】:
-
把它放在 FixUpdate() 中,而不是调用协程。
-
不确定这会有什么帮助,因为它都是基于秒数的时间。
-
我会使用 lerp 或 slerp,或者使用平滑的 deltaTime 而不是您现在使用的日期。