0

我正在使用 Unity3d 和 Monodevelop(c#) 制作游戏。当我的弹珠(球体)停止时,我试图检测事件。我的大理石正在使用 Rigidbody.Addforce() 方法移动。有什么办法可以找到吗??

4

2 回答 2

1

rigidbody.velocity.magnitude将为您提供物体行驶的速度。它是速度矢量的大小。使用它,您可以检查对象的速度何时达到零:

if(rigidbody.velocity.magnitude == 0.0f) {
    Debug.Log("object has stopped.");
}

然而,根据我的经验,物体的速度将永远达到零。它会继续非常非常非常非常缓慢地移动。相反,除非你有很强的摩擦力,否则它的速度矢量的大小永远不会完全为零。

为了弥补这一点,请找出物体“基本停止”的良好速度。例如,如果速度低于 0.0001,它可能已经“停止”了,因为它不会移动太多。您必须进行试验以确定该值应该是什么:

float stopThreshold=0.001f;

if(rigidbody.velocity.magnitude <= stopThreshold) {
    Debug.Log("object has mostly stopped.");
}

但概念保持不变:用于rigidbody.velocity.magnitude确定对象的速度。

于 2014-09-11T13:21:17.843 回答
0

如果小于您的阈值 w/ci 认为更好 < 0.1f,您可以检查对象刚体速度或角速度;

if(rigidbody.velocity.sqrMagnitude < .01  || rigidbody.angularVelocity.sqrMagnitude < .01) { Debug.Log ( "OBJECT STOPPED ");  }
于 2014-09-12T02:07:06.423 回答