使用Vector3.Lerp“更顺畅”地传送远程传送

时间:2015-06-29 08:36:47

标签: c# unity3d

简短版本:我可以在Vector3.Lerp中使用transform.Translate(new Vector3(-6,0));(不计算机芯中的速度变量)吗?

我有一个非常简单的游戏,玩家可以从1个车道移动到另一个车道(最多3个车道(如Temple Run))。现在我的角色只是传送到其他车道,我希望Vector3.Lerp让它变得更加流畅。我现在的问题是,我无法弄清楚如何将它实现到我的代码中。我不用速度变量计算我的运动,因为我的角色开始移动不均匀的距离,这是我不想要的。我有3个车道要搬到。

if (Input.GetKeyDown("a"))
{             
    // Do I need a speed variable here?
    transform.Translate(new Vector3(-6, 0));
}

1 个答案:

答案 0 :(得分:1)

如果代码不在Update()中,则可以使用StartCoroutine

if (Input.GetKeyDown("a")) {
    changing = true;
    StartCoroutine(ChangeLane(int n));
}

IEnumerator ChangeLane(int n) {
    float changeProgress = 0f;
    float changeDuration = 1f;
    originPosition = tranform.position;
    //the speed should be run speed
    targetPosition = originPosition + new Vector3(n * lanWidth, speed * changeDuration);

    while(changeProgress < changeDuration) {
        tranform.position = Vector3.Lerp(originPosition, targetPosition, changeProgress / changeDuration);
        changeProgress += Time.DeltaTime;
        yield return 0;
    }
    tranform.position = targetPosition;
    changing = false;
}

如果代码在Update()中,您也可以使用它,但在更改lane时,您不应该开始新的更改