Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 缓慢地将一个物体移动到单位C中的一个新位置#_C#_Unity3d_Vector - Fatal编程技术网

C# 缓慢地将一个物体移动到单位C中的一个新位置#

C# 缓慢地将一个物体移动到单位C中的一个新位置#,c#,unity3d,vector,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);

我的场景中有一个汽车对象。我想模拟一个基本的驾驶动画,慢慢移动到一个新的位置。。。我使用了下面的代码,但我认为我使用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
    返回的值。您将希望更改每帧的位置。为此,请使用

  • 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;
    }
}

一个简单的解决方案是在Lerp函数实际将对象的位置设置为所需位置后立即执行

下面是它应该是什么样子

carObject.transform.position = Vector3.Lerp (oldCarPos, newCarPos, Time.deltaTime * 2.0f);
carObject.transform.position = newCarPos;

嗨@Matt,代码运行良好,但这样游戏对象移动速度变快,你知道我如何使移动速度变慢吗?我已经尝试将值2.0f从(Time.deltaTime*2.0f)更改为。提前谢谢