当用户按下按钮时,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;
}
}
}
答案 0 :(得分:4)
所有你需要做的就是补偿帧时间(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优先于正常更新功能,
固定更新的单位默认通话上限为每秒20次通常建议你放置轻量级进程,这些进程可以从固定更新的可预测更新间隔中受益,例如移动和物理。
注意 ::将FixedUpdate
中的所有内容乘以Time.fixedDeltaTime
仍然是一个好主意,以防万一.Infixupdate无法达到每秒20个刻度。
答案 1 :(得分:0)
现在我对Unity几乎一无所知,所以这可能不会接近答案。通常情况下,你会通过计算一个因子来使游戏帧速率独立,例如,如果你不想在一秒内移动1个距离,你计算的时间通过并应用乘法。例如。 “timepasssed-factor * amounttomove”
从我可以收集到的内容中,您需要使用Time.deltaTime
,这将为您提供帧之间传递的实际时间,其中timeScale
实际上只是用于慢动作等...
所以... amountToMove.y = 1f * Time.deltaTime * ???;