我创建了一个简单的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
)值同步,所以这不会起作用。
答案 0 :(得分:0)
尝试在FixedUpdate()
中使用Vector3.lerp()或Vector2.lerp(),确保您的要求每秒被调用固定次数仍然可以使用没有太多视觉不规范的共同例行。
// for a 3d system
public static Vector3 Lerp(Vector3 from, Vector3 to, float t);
// for a 2d system
public static Vector2 Lerp(Vector2 from, Vector2 to, float t);