チュートリアル:Roll-a-Ball(番外編2) OnTriggerEnterとOnCollisionEnter

前回カスタマイズしたときに、青色のフィールドから落下した後に赤いの所に着いたらGameOverと表示されるようにカスタマイズしました。

黄色いGameObjectに衝突した際に使用したOnTriggerEnterでできるだろうと思ったのですが・・・

OnTriggerEnterを使うと、黄色いObjectと同じように衝突した後に物体をすり抜けてそのまま落ちてしまいました。

_

よく考えればOnTriggerEnter使うときにチュートリアルの動画で説明してたなーと。

APIリファレンス(日本語版)にもこう書いてあります。

OnTriggerEnter Colliderが他のトリガーイベントに侵入した時にOnTriggerEnterが呼び出されます。

このメッセージはトリガー状態のコライダーと(もしあれば)トリガー状態のコライダーと一緒にアタッチされているRigidbody、 トリガーに触れているRigidbody(Rigidbodyがない場合はコライダー)に送信されます。 複数あるこライダーのうち1つにRigidbodyがアタッチされていた場合、このトリガーイベントはその小ライダーのみに送信されます。

なるほど、つまりOnTriggerEnterは対象のObjectの表面に当たった時じゃなくて、内部に入ったイベントを呼んでいたのですね。

_

それじゃあ、表面に当たった時のイベントをAPIリファレンスで探せば良いね!

・・・

OnTriggerEnterの真上にあるじゃあないか!

OnCollisionEnter このcollider/rigidbodyは他のcollider/rigidbodyに触れた時にOnCollisionEnterは呼び出されます。

記述したスクリプトはこれだけ!

    void OnCollisionEnter (Collision collision)
    {
        if (collision.gameObject.tag == Hell
        {
            winText.text = Game Over;
        }
    }

_

落ちたときに衝突する床のObjectからOnTriggerEnterのときに使用した、

InspectorのMesh Colliderの中にあるConvexとis Triggerのチェックが外れている事を確認し、

PlayModeスタート!

_

今度はすり抜けずに衝突した後に”GameOver”と表示された!

コメントを残す