今回は、カーレースゲームを題材にして、「車がリングを通ったか判定」するシステムを作成します。
「当たり判定」と聞くと、何かと何かが衝突するイメージが湧くかと思いますが、すり抜けるものを検知するということも「当たり判定」で実現できます。
カーレースだけでなく、オブジェクトの当たり判定を使うという意味では、ある場所に行ったら発生するイベントの制御や、コインやアイテムの取得判定にも応用できるシステムですね。
今回使用させていただいているAsset
参考 POLYGON-Starter Packunity Asset Storeそれでは、やっていきます!
Contents
車とリングの当たり判定を実現する
実は、車とリングの当たり判定自体はそんなに難しくありません。(といっても僕自身調べながら実装しましたが、、)
車とリングの設置
まず、車とリングを設置します。
当たり判定が実装できればいいので、1つずつ適当に置きます。
Colliderの設定
車とリングの両方にcolliderというコンポーネントを設定します。
俗にいう「当たり判定」に必要なコンポーネントです。
(Colliderについてより詳しく知りたい方はこちら)
今回使用しているアセットには嬉しいことにMesh Colliderが含まれているようなので、車にはMesh Colliderを、リングにはBox Colliderを適用して当たり判定を実現します。
(追記:後でわかったのですが、車にMesh Colliderをつけると、ガタガタする場合があるので、Box Colliderと両方もしくはBox Colliderのみを設定することをお勧めします。)
新しくcolliderをつけるには、Inspector > Add Component から、colliderと検索して、Box ColliderまたはMesh Colliderを選びます。
リングにBox Colliderを適用するのは、リングの間を通ったか判定できるようにするためです。
リングにBox Colliderが適用されると、こんな感じに緑色の立体に囲まれている様子が確認できると思います。
リングのBox ColliderのIs Triggerをオンに
リングが持つBox Colliderとの当たり判定のために、リングのBox Colliderにある、Is Triggerにチェックマークを入れます。
さらに、車のMesh ColliderのConvexにもチェックマークをつけることで、当たり判定を実現します。→リングそのものとの当たり判定ができます!
これで、当たり判定に必要な準備はおしまいです。
Rigid Bodyの設定も忘れない
これについては、下記の記事を参照するまで気づくことができなかったのですが、当たり判定をOnTriggerを用いて実現したい場合、どちらかのオブジェクトにRigit Bodyが適用されていないといけないようです。
参考 OnTriggerを利用した当たり判定を理解しよう!XR-HUBしん
スクリプトの記述
リングのスクリプト
リングの間を車が通った時に検知できるよう、スクリプトを記述します。
public void OnTriggerEnter(Collider other) //領域外に入った場合の処理 { if (other.CompareTag("Car")) //車が領域外に出た時 { this.tag = "PassedRing"; //タグをPassedRingに変える //オブジェクトの色を黄色にする GetComponent<Renderer>().material.color = Color.yellow; } } public void OnTriggerExit(Collider other) //領域外を出た場合の処理 { if (other.CompareTag("Car")) //車が領域外を出た時 { this.tag = "Ring"; //タグをRingに変える } }
こちらのスクリプトは下記の記事を参考にさせていただきました。
参考 OnTriggerを利用した当たり判定を理解しよう!XR-HUBリングの中をCarというタグのオブジェクトが通過したら、リングオブジェクトが黄色になり、当たり判定が動作したことが色の変化でわかります。
さらに、リングの間に入った場合にはタグをRingからPassedRingに変更しています。これは、リングがもっと増えた場合に、「今通過したリングがどのリングなのかを判定する」ために使用したいので、このようにしています。なので、ただ当たり判定を確かめたいだけであれば、今は必要ありません。
近日中に、リングを増やした場合の記事をあげるのでそちらもぜひ読んでみてください!
実装結果
実際に動かしてみるとこんな感じになります。
ちゃんとリングの間を通った時に、リングの色が黄色に変わっていますね!
これを応用して、連なるリングに当たり判定を適用すれば、逆走やショートカットを防げるカーレースのコースが作成できます。
それについても後日記事にする予定なので、気になる方はぜひチェックしてみてください。
まとめ
今回のまとめです。

エラーなく動けば、実装完了です。