【问题标题】:How to know object is stopped.object is forced by rigid body如何知道物体已停止。物体被刚体强迫
【发布时间】:2014-09-11 11:43:35
【问题描述】:

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

【问题讨论】:

    标签: unity3d rigid-bodies


    【解决方案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 来确定对象的速度。

    【讨论】:

    • 我想在它停止时销毁我的对象。但是当我使用rigidbody.velocity.magnitude时,幅度值从0开始增加。所以我的对象在力开始时被破坏:(Rnu
    • 嗯,你只需要确保你只在物体已经运动时才开始检查。
    • 我解决了!我从零开始检查幅度。 Rnu
    【解决方案2】:

    你可以检查物体刚体速度或角速度,如果小于你的阈值 w/c 我认为更好

    if(rigidbody.velocity.sqrMagnitude < .01  || rigidbody.angularVelocity.sqrMagnitude < .01) { Debug.Log ( "OBJECT STOPPED ");  }
    

    【讨论】:

      猜你喜欢
      • 2012-08-20
      • 1970-01-01
      • 2023-03-28
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      相关资源
      最近更新 更多