Buravo46's Note

学んだ事を書いていくブログです。

【Unity】物体が停止しているかどうかを確認する

RigidBodyコンポーネントを持つ物体が停止した時に別の処理を行いたいという時、

便利な関数が存在します。

それはRigidbodyのクラスが持つ IsSleeping() という関数です。

Rigidbodyが休止した状態のことをスリーブモードと呼び、

スリーブモードかどうかを確認するために使用されるのがIsSleeping()という関数です。

この関数は物体が停止していたらTrue、動作していたらFalseを返します。

試しに、物体が停止したら上方向に力を加える例を用意しました。

/*===============================================================*/
/**
* 物体が停止したら上方向に力を加えるコンポーネント
* 2014年9月7日 Buravo
*/
using UnityEngine;
using System.Collections;

public class Test_IsSleeping : MonoBehaviour {
    #region メンバ変数
    /*===============================================================*/
    /**
    * @brief 力
    */
    private float m_power = 10.0f;
    /*===============================================================*/
    #endregion
    
    /*===============================================================*/
    /**
    * @brief 初期化
    */
    void Start () {
    }
    /*===============================================================*/
    
    /*===============================================================*/
    /**
    * @brief 物理エンジンの更新処理
    */
    void FixedUpdate () {
        // スリープモードか確認する.
        if (rigidbody.IsSleeping())
        {
            print("Sleeping");
            // 上方向に力を加える.
            rigidbody.AddForce(Vector3.up * m_power, ForceMode.VelocityChange );
        }
    }
}

これを使用すれば、ボーリングやビリヤードのゲームを創る際に

ボールが停止したら次の処理をする時など便利になります。