慢慢将对象移动到Unity C中的新位置#[复制]

参见英文答案 > Move GameObject over time                                    3个
我的场景里有一个车对象.我想通过慢慢地将它移动到一个新的位置来模拟一个基本的驾驶动画…我使用下面的代码,但我认为我使用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);
}
您的代码存在两个问题:

> Vector3.Lerp返回单个值.由于您的函数只会被调用一次,因此您只需将位置设置为Lerp返回的值即可.您需要改变每一帧的位置.为此,请使用coroutines.
> Time.DeltaTime返回自最后一帧以来经过的时间,通常是一个非常小的数字.您需要传入0.0到1.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;
    }
}
相关文章
相关标签/搜索