Unity3d 如何知道物体被停止。物体被刚体强迫

Unity3d 如何知道物体被停止。物体被刚体强迫,unity3d,rigid-bodies,Unity3d,Rigid Bodies,我正在使用Unity3d和Monodevelop(c#)制作游戏。 我试图在我的大理石(球体)停止时检测事件。 我的大理石正在使用Rigidbody.Addforce()方法移动。 有什么方法可以找到方向吗???刚体。速度。大小将给你物体移动的速度。它是速度向量的大小。使用该选项,可以检查对象的速度何时达到零: if(rigidbody.velocity.magnitude == 0.0f) { Debug.Log("object has stopped."); } 然而,根据我的经验

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

刚体。速度。大小将给你物体移动的速度。它是速度向量的大小。使用该选项,可以检查对象的速度何时达到零:

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.");
}
浮动停止阈值=0.001f;

如果(rigidbody.velocity.magnitude你可以检查物体的刚体速度或角速度,如果小于你的阈值,我认为最好<0.1f

if(rigidbody.velocity.sqrMagnitude < .01  || rigidbody.angularVelocity.sqrMagnitude < .01) { Debug.Log ( "OBJECT STOPPED ");  }
if(rigidbody.velocity.sqrMagnitude<.01 | | rigidbody.angularVelocity.sqrMagnitude<.01){Debug.Log(“对象已停止”);}

我想在物体停止时摧毁它。但当我使用刚体.velocity.magnitude时,magnitude值从0开始增加。所以我的物体在力的开始时被摧毁:(好吧,你只需要确保你只在物体已经在运动时才开始检查。我解决了它!我在它从零增加后开始检查大小。