当用户按下按钮时,将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;
}
}
}
最佳答案
您需要做的所有事情都是为了补偿帧时间(即:每秒60帧,每秒更新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优先于普通更新功能,
-统一更新的默认呼叫上限是每秒20次
通常建议您在固定更新(例如运动和物理)上放置可从可预测的更新间隔中受益的轻量级过程。
注意:将
FixedUpdate
中的所有内容乘以Time.fixedDeltaTime
仍然是一个好主意,以防万一Fixedupdate无法达到其每秒20 tick的计数。