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