当用户按下按钮时,将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的计数。

08-25 19:48