【Unity】ゴール判定する

f:id:s44511173:20190719114403g:plain

machokoさんが運んだアイテムは、ゴール内の床に接地することでカウントされます。今回はこれについて、ご紹介します。

ゴール床にコライダを追加する

f:id:s44511173:20190719122028p:plain

今回はゴール床はPlaneオブジェクトを使っているので、あらかじめコライダがついています。もしついていないオブジェクトを使っている場合のみ、追加してください。

アイテムにコライダを追加する

f:id:s44511173:20190719122040p:plain

Cube、Sphere、Cylinder、Coneオブジェクトにもあらかじめコライダがついています。こちらもゴール床と同様、コライダがない場合のみ追加してください。なお、ConeはProBuilderで作成しました。

スクリプトで衝突判定を検知する

コライダで衝突を検知すると、衝突イベントが発生します。イベントを受け取るには、以下のメソッドを必要に応じてオーバーライドします。

  • OnCollisionEnter・・・衝突したときに呼ばれる
  • OnCollisionExit・・・衝突が終了したときに呼ばれる

なお、コライダのIsTriggerをtrueにしている場合は、OnTriggerEnter/OnTriggerExitを使用します。IsTriggerは衝突を検知するのみで、衝突した結果の物理動作を行わない場合にtrueにします(ぶつかっても跳ね返らないようにしたい場合など)。

 

衝突した相手の情報を取得し、ゴール床であればゴール判定とするスクリプトをアイテムにアタッチします。

/// <summary>
/// 衝突した際にコールされる
/// </summary>
/// <param name="collision">衝突した相手のコライダ</param>
private void OnCollisionEnter(Collision collision) {
    // 衝突した相手のタグを確認する
    if(collision.gameObject.tag == Defines.GoalTag) {
        // ゴール処理
        GoalEvent.Invoke();
    }
}

 

 結論

  • ゴール判定は衝突判定を使う
  • 衝突判定には、コライダを使用する
  • ConeオブジェクトはProBuilderで作成できる
  • コライダのIsTriggerは、衝突した結果の物理動作を行いたくない場合にtrueにする