首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >急速Lerp运动

急速Lerp运动
EN

Stack Overflow用户
提问于 2016-04-04 19:02:07
回答 1查看 74关注 0票数 0

我有这个IEnumerator把我的玩家移动到游戏棋盘上的一个特定位置,当他到达那个棋盘时。这是代码,非常简单。

代码语言:javascript
复制
  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循环之后设置它的,所以协同例程被调用的次数比需要的次数多一两次。

EN

回答 1

Stack Overflow用户

发布于 2016-04-04 19:07:39

变化

代码语言:javascript
复制
(elapsedTime / time) 

代码语言:javascript
复制
Math.Min((elapsedTime / time), 1)

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

使用Math.Min时,您将把输出限制为1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36400832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档