gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:19:42 27 4
gpt4 key购买 nike

我试过类似的东西

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

Update() 中。

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

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

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

最佳答案

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

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;
}
}

关于unity3d - 如何在 Unity 中计算游戏对象的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55042997/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com