親戚のゲーム作ってるおじさんブログ

「そういえば、そんな人いるとか聞いたなあ」って思ったでしょ? 私です。

コライダーのコールバックが呼ばれる条件まとめ

目的

いつもはまる呼ばれたり呼ばれなかったりするコライダーのコールバックが呼ばれる条件を、いい加減整理して覚える

OnTriggerEnter

呼ばれる条件

自分自身のコライダーのIsTriggerがTrueだった場合に呼ばれる(子のコライダーに衝突しても呼ばれない)

相手のIsTrigger状態はどちらでも呼ばれる

  • 自身、または相手にrigidbodyコンポーネントがついていて、IsSimulateになっている(相手の子のコライダーにあたっても呼ばれる)
  • rigidbodyコンポーネントがついている側は、(rigidbodyのついていない)子のコライダーが当たったとしても、OnTriggerEnterが呼ばれるのは、rigidbodyコンポーネントがついている親オブジェクトのみ。 子のMonobehaviorのOnTriggerEnterは呼ばれない。
private void OnTriggerEnter(Collider collider)
{
    Debug.Log("bbb");
    if (collider.gameObject.tag == TagNames.Player)
    {
        isgotten = true;
    }
}

衝突座標の取得

できない。自身で中間地点求めるとかしないといけない

OnCollisionEnter(Collision collision)

呼ばれる条件

衝突する場合、つまり以下の場合に呼ばれる

  • 自分自身or子のコライダーのIsTriggerがFalse
  • 相手のコライダーのIsTriggerがFalse
  • 自分自身の同オブジェクトにrigidbodyコンポーネントがついていて、IsSimulateになっている

参考

コライダー - Unity マニュアル (unity3d.com)