我试过像这样的东西
float speed = (currentPosition - previousPosition).magnitude / Time.deltaTime
在Update()
中。
但是我得到了非常糟糕的结果,因为currentPosition
和previousPosition
太接近了。在减法之后,有太多的舍入误差。速度值波动太大。
另外,我也不想对多个帧进行平均,因为这会产生延迟,并且只会稍微改善结果。
有没有更好的方法来计算物体的速度?
发布于 2019-03-07 20:45:05
你可以使用协程来计算比每一帧都慢的速度:
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;
}
}
https://stackoverflow.com/questions/55042997
复制相似问题