当用户按下按钮时,fwdi 被设置为 1,从而启动此 if 语句。对我来说,如果我每次更新将 fwdi 减少 0.1 并将玩家移动 0.1,那么一切都应该在 1 秒标记内完成,但移动比 1 秒快得多,这对我来说似乎是合乎逻辑的。我有一个也播放的动画,需要 1 秒,但它们不匹配。
编辑
void Update ()
{
if (fwdi > 0.0f)
{
fwdi = fwdi - 1.0f * Time.deltaTime;
amountToMove.y = 1.0f * Time.deltaTime;
transform.Translate (amountToMove);
if (fwdi == 0.0f)
{
amountToMove.y = 0.0f;
fwdi = 0.0f;
}
}
}
最佳答案
您需要做的就是补偿帧时间(IE:在 60fps 下,每秒调用更新 60 次)
void Update ()
{
if (fwdi > 0)
{
amountToMove.y = 0.1f*Time.deltaTime;
transform.Translate (amountToMove);
fwdi = fwdi - amountToMove.y;
//This code bellow looks redundant, and probably unnecessary
if (fwdi == 0)
{
amountToMove.y = 0;
fwdi = 0f;
}
}
}
还可以考虑在FixedUpdate
上进行移动。固定更新的工作方式与更新类似,但有一些关键区别:
-Fixedupdate 优先于普通更新功能,
-unity 固定更新的默认调用上限为每秒 20 次
通常建议您将可从可预测的更新间隔中受益的轻量级进程放在固定更新上,例如运动和物理。
注意::将 FixedUpdate
中的所有内容乘以 Time.fixedDeltaTime
仍然是一个好主意,以防万一 Fixedupdate 无法达到其目标每秒计数 20 个刻度。
关于c# - Unity 3D 计时器似乎运行得太快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20674699/