生涩的Lerp动作

时间:2016-04-04 11:02:07

标签: c# unity5

我有这个IEnumerator将我的玩家移动到游戏牌上的特定位置后到达那个牌。这是代码,它非常简单。

  IEnumerator LerpToPlayerSpot(Vector3 newPosition, float time)
    {
        float elapsedTime = 0;
        Vector3 startingPos = transform.position;
getInPosFlag = true;
        while (elapsedTime < time)
        {
            transform.position = Vector3.Lerp(startingPos, newPosition, (elapsedTime / time));
            elapsedTime += Time.deltaTime;
            yield return null;
        }

    }

我遇到的问题是,在到达正确的位置后,玩家似乎在安顿到位之前稍微晃了一下。我记得通过实现我自己的近似来解决这个问题,但我想知道是否有更好的解决方案。

编辑。我修好了它。应在while循环之前设置getInPosFlag。因为我是在while循环之后设置的,所以共同例程被调用的次数比需要的次数多一两次。

1 个答案:

答案 0 :(得分:0)

更改

Rectangle r = new Rectangle();

(elapsedTime / time) 

如果时间不是Time.deltaTime倍数(time%Time.deltaTime!= 0)那么你就超过了Lerp范围(0,1)。

使用Math.Min,您可以将输出限制为一个。