【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 ); } } }
これを使用すれば、ボーリングやビリヤードのゲームを創る際に
ボールが停止したら次の処理をする時など便利になります。