我有这个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循环之后设置它的,所以协同例程被调用的次数比需要的次数多一两次。
发布于 2016-04-04 19:07:39
变化
(elapsedTime / time) 至
Math.Min((elapsedTime / time), 1)如果时间不是Time.deltaTime倍数(时间% Time.deltaTime != 0),那么您超出了Lerp范围(0,1)。
使用Math.Min时,您将把输出限制为1。
https://stackoverflow.com/questions/36400832
复制相似问题