【发布时间】:2014-09-11 11:43:35
【问题描述】:
我正在使用 Unity3d 和 Monodevelop(c#) 制作游戏。 当我的大理石(球体)停止时,我试图检测事件。 我的大理石正在使用 Rigidbody.Addforce() 方法移动。 有什么办法可以找到吗??
【问题讨论】:
标签: unity3d rigid-bodies
我正在使用 Unity3d 和 Monodevelop(c#) 制作游戏。 当我的大理石(球体)停止时,我试图检测事件。 我的大理石正在使用 Rigidbody.Addforce() 方法移动。 有什么办法可以找到吗??
【问题讨论】:
标签: unity3d rigid-bodies
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 来确定对象的速度。
你可以检查物体刚体速度或角速度,如果小于你的阈值 w/c 我认为更好
if(rigidbody.velocity.sqrMagnitude < .01 || rigidbody.angularVelocity.sqrMagnitude < .01) { Debug.Log ( "OBJECT STOPPED "); }
【讨论】: