我有这个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循环之后设置的,所以共同例程被调用的次数比需要的次数多一两次。
答案 0 :(得分:0)
更改
Rectangle r = new Rectangle();
到
(elapsedTime / time)
如果时间不是Time.deltaTime倍数(time%Time.deltaTime!= 0)那么你就超过了Lerp范围(0,1)。
使用Math.Min,您可以将输出限制为一个。