C# 急动勒普运动

C# 急动勒普运动,c#,unity5,C#,Unity5,我有一个IEnumerator,在我的玩家到达游戏板磁贴后,将他移动到该磁贴上的特定位置。下面是代码,非常简单 IEnumerator LerpToPlayerSpot(Vector3 newPosition, float time) { float elapsedTime = 0; Vector3 startingPos = transform.position; getInPosFlag = true; while (elapsed

我有一个
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;
        }

    }
IEnumerator LerpToPlayerSpot(矢量3新位置,浮动时间)
{
float elapsedTime=0;
矢量3开始位置=变换位置;
getInPosFlag=true;
while(elapsedTime<时间)
{
transform.position=Vector3.Lerp(startingPos,newPosition,(elapsedTime/time));
elapsedTime+=Time.deltaTime;
收益返回空;
}
}
我遇到的问题是,在到达正确的位置后,球员似乎在适应位置前会有点颠簸。我记得在其他项目中通过实现我自己的近似方法解决了这个问题,但我想知道是否有更好的解决方案

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

更改

(elapsedTime / time) 

如果time不是time.deltaTime倍数(time%time.deltaTime!=0),则您超出了Lerp范围(0,1)


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

谢谢。使用数学。Min没有为我做任何事情,但我忘记了按时间将传递给co例程的参数乘以。Deltatime进一步测试后,抖动运动仍然存在,抖动也同样显著。你能定义“抖动”吗?最后失败了?介于两者之间?我没有失败。它到达了正确的位置,然后在该位置之间来回移动了一段时间。问题是否不在该功能上,而是在外部?可能您的对象未正确放置在该函数之外?
Math.Min((elapsedTime / time), 1)