首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Unity中计算游戏对象的速度?

如何在Unity中计算游戏对象的速度?
EN

Stack Overflow用户
提问于 2019-03-07 19:44:19
回答 1查看 1.4K关注 0票数 3

我试过像这样的东西

float speed = (currentPosition - previousPosition).magnitude / Time.deltaTime

Update()中。

但是我得到了非常糟糕的结果,因为currentPositionpreviousPosition太接近了。在减法之后,有太多的舍入误差。速度值波动太大。

另外,我也不想对多个帧进行平均,因为这会产生延迟,并且只会稍微改善结果。

有没有更好的方法来计算物体的速度?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-07 20:45:05

你可以使用协程来计算比每一帧都慢的速度:

代码语言:javascript
运行
复制
void OnEnabled() {
    StartCoroutine(SpeedReckoner());
}

public float Speed;
public float UpdateDelay;

private IEnumerator SpeedReckoner() {

    YieldInstruction timedWait = new WaitForSeconds(UpdateDelay);
    Vector3 lastPosition = transform.position;
    float lastTimestamp = Time.time;

    while (enabled) {
        yield return timedWait;

        var deltaPosition = (transform.position - lastPosition).magnitude;
        var deltaTime = Time.time - lastTimestamp;

        if (Mathf.Approximately(deltaPosition, 0f)) // Clean up "near-zero" displacement
            deltaPosition = 0f;

        Speed = deltaPosition / deltaTime;


        lastPosition = transform.position;
        lastTimestamp = Time.time;
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55042997

复制
相关文章

相似问题

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