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

标签 c# unity3d vector

<分区>

我的场景中有一个汽车对象。我想通过将其缓慢移动到新位置来模拟基本的驾驶动画......我使用了下面的代码但我认为我使用 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.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;
    }
}

关于c# - 在 Unity C# 中将对象缓慢移动到新位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27212426/

相关文章:

c# - 删除其中一个 using 语句后仍然存在不明确的 void 名称

c++ - 管理 POD 类型的 C++ STL vector 回收的简便方法

c++ - 我将如何实现 FCFS 处理器调度模拟器?

c# - 从 PDF 中删除文本

c# - 在 azure 上存储和使用现有数据保护 key

c# - 为什么 User.Invoke ("SetPassword") 使用我计算机的当前凭据以及我如何指定它们?

C#/Linq - 排序 IDictionary

unity3d - 为什么从assetBundle添加MeshCollider时mesh已经被标记为不可访问,如何解决?

c++ - 函数不断返回相同的值

c# - 从excel工作簿中删除非空工作表