首页 > 解决方案 > 将 2d 对象从 a 点移动到 b 点而不改变其旋转

问题描述

我正在尝试将 2d 对象从 a 点移动到 b 点而不改变它的统一旋转

我尝试使用Vector2.Lerp()但它不起作用

Vector2 pointB = new Vector2(20, 10);
Vector2.Lerp(transform.position, pointB, 3F);

代码应在 3F 秒内将对象从点 a 移动到 b

标签: c#unity3d2d

解决方案


首先,Vector2.Lerp不改变第一个参数的值。transform.position如果您想以这种方式更改变换的位置, 您将需要分配新值。

其次,您需要每帧更新一次变换的位置,以保持变换平稳移动。

第三,Vector2.Lerp只会在开始和结束之间产生一个t介于 0 和 1 之间的位置。这t应该与自该运动开始以来经过的时间与完成该运动的时间之比有关。

这是协程的一个很好的用途:

private IEnumerator GoToInSeconds(Vector2 pointB, float movementDuration)
{
    Vector2 pointA = transform.position;
    float timeElapsed = 0f;
    while (timeElapsed < movementDuration)
    {
        yield return null;
        timeElapsed += Time.deltaTime;
        transform.position = Vector2.Lerp(pointA, pointB, timeElapsed/movementDuration);
    }
}

这是一个如何使用它的示例Start

void Start() 
{
    Vector2 pointB = new Vector2(20, 10);
    StartCoroutine(GoToInSeconds(pointB, 3f));
}

推荐阅读