在Unity C中将对象缓慢移动到新位置#

Min*_*eld 6 c# vector unity-game-engine

我的场景里有一个车对象.我想通过慢慢地将它移动到一个新的位置来模拟一个基本的驾驶动画...我使用下面的代码,但我认为我使用Lerp错了?它只是跳了一下然后停了下来?

void PlayIntro() {
    GameObject Car = carObject;
    Vector3 oldCarPos = new Vector3(Car.transform.position.x, Car.transform.position.y, Car.transform.position.z);
    GameObject posFinder = GameObject.Find("newCarPos");

    Vector3 newCarPos = new Vector3(posFinder.transform.position.x, posFinder.transform.position.y, posFinder.transform.position.z);

    carObject.transform.position = Vector3.Lerp (oldCarPos, newCarPos, Time.deltaTime * 2.0f);
}
Run Code Online (Sandbox Code Playgroud)

Lok*_*kij 10

您的代码存在两个问题:

  • Vector3.Lerp返回单个值.由于您的函数只会调用一次,因此您只需将位置设置为任何Lerp返回值.您需要改变每一帧的位置.为此,请使用协同程序.

  • Time.DeltaTime返回自最后一帧以来经过的时间,通常是一个非常小的数字.您将要在多个从传递0.01.0这取决于运动的进步.

您的代码将如下所示:

IEnumerator MoveFunction()
{
    float timeSinceStarted = 0f;
    while (true)
    {
        timeSinceStarted += Time.DeltaTime;
        obj.transform.position = Vector3.Lerp(obj.transform.position, newPosition, timeSinceStarted);

        // If the object has arrived, stop the coroutine
        if (obj.transform.position == newPosition)
        {
            yield break;
        }

        // Otherwise, continue next frame
        yield return null;
    }
}
Run Code Online (Sandbox Code Playgroud)