この記事でのバージョン
Unity 5.5.0p1
はじめに
Rigidbody2Dはデフォルトの状態だと、
一定時間動かない場合はSleep状態となり、衝突を判定しなくなります。
なお、Sleep状態となると以下のようにCollider2Dの色が薄くなります。
上記の例では二つのオブジェクトにRigidbody2DとCollider2Dを付け、
右のオブジェクトに以下のようなに衝突時にログを出すようなコンポーネントを付けています。
private void OnTriggerStay2D (Collider2D other){ Debug.Log(other.gameObject.name); }
Sleeping Mode
単純に一切Sleepしないようにするには、
Rigidbody2DのSleepingModeをNever SleepにすればOKです。
なお、上記の例では両オブジェクトともNever Sleepにしていますが、
どちらか一つが起きていれば衝突を感知する事が可能です。
WakeUp, Sleep
Sleeping ModeをNever Sleepにしてしまうと、
動いていなくても常に衝突判定を行っているので、無駄に処理が重くなってしまいます。
なので、起こす必要がある時にWakeUpを使ってRigidbody2Dを起こすのが効率的かと思います。
なお、IsSleepingでSleep状態かの判定を行う事ができます。
//寝ていれば起こす if(GetComponent<Rigidbody2D>().IsSleeping){ GetComponent<Rigidbody2D>().WakeUp(); }
また、Sleeping Modeが何であっても、Sleepを使えば、強制的にSleep状態にする事も可能です。
GetComponent<Rigidbody2D>().Sleep();