【Unityで学ぶC#プログラミング⑫】当たり判定(OnCollisionEnter2D・OnTriggerEnter2D)

プログラミング初心者向けのUnityで学ぶC#講座。

初心者にもわかりやすく、なるべく専門的な用語をなくして簡単に説明します。

今回は「当たり判定(OnCollisionEnter2D・ OnTriggerEnter2D)」についての解説です。

この記事を読むと以下の事が分かるようになります。

当たり判定とは

OnCollisionEnter2D

OnTriggerEnter2D

ゲーム開発で当たり判定を使う事が頻繁にあります。

しっかりと覚えて、自身のゲーム開発に役立てましょう。

それではさっさく解説していきます。

当たり判定とは

当たり判定とは、オブジェクト(プレイヤー、アイテム、地形、銃弾など)同士の接触が起こったかどうか判定することです。

たとえば、パンチが当たったらHPを減らす、アイテムに触れたら回復する、などゲームで使われる場面は多くあります。

ゲームをプレイしていると「当たり判定」という言葉をすでに聞いた事があるかもしれません。

それでは次にUnityの当たり判定がどんなものか確認しましょう。

OnCollisionEnter2D

シーン上に地面の画像を配置しても、当たり判定がないとプレイヤーはその上を移動することができません。

当たり判定を利用して、床オブジェクトの上にプレイヤーを配置してみましょう。

まず床になるオブジェクト(ground)を用意します。ヒエラルキーで右クリックしてQuardを追加しましょう。

インスペクターからMeshColliderを削除してBoxCollider2DとRigidBody2Dを追加しました。物理演算で移動するオブジェクトではないので、Rigid BodyBodyのTypeをKinematicに変更しました。

また、床らしくするために、Xのスケール値を大きくしています。

それでは床の上に落ちるプレイヤーを作成しましょう。先ほどと同じようにQuardを追加して、MeshColliderを削除してBoxCollider2DとRigidBody2Dをアタッチ

今回のRigidbodyのタイプはDynamicで重力を利用して落下するようになります。

それではプレイしてみましょう

プレイヤーが重力で落下して、床の上に落ちるのが確認できました。

次にOnCollisionEnter2Dを利用して、床におちたオブジェクトのタグがプレイヤーなら削除するスクリプトを作成しました。
タグについては【Unityで学ぶC#プログラミング⑩】タグとはで詳しく解説しているので、興味のある方はこちらもご覧ください。

オブジェクトが衝突した瞬間に消えたのが確認出来ました。

今回はOnCollisionEnter2Dを利用していますが、3Dの場合はOnCollisionEnterを使います。その際はColliderとRigidbodyも2Dではないものを利用しましょう。

OnCollisionEnter系の関数まとめ

3DのCollider の場合

OnCollisionEnter Colliderを持つオブジェクト同士が接触した時
OnCollisionExit Colliderを持つオブジェクト同士が離れた時
OnCollisionStay Colliderを持つオブジェクト同士が接触している時

2D のCollider の場合

OnCollisionEnter2DCollider2D を持つオブジェクト同士が接触した時
OnCollisionExit2D Collider2D を持つオブジェクト同士が離れた時
OnCollisionStay2D Collider 2D を持つオブジェクト同士が接触している時

OnTriggerEnter2D

衝突の影響をなくした判定です。

オブジェクトがコライダーをすり抜けるときに呼び出される関数です。

OnTrigerEnterを有効にする場合はColliderの Is Trigerにチェックを入れる必要があります。

それではOnTriggerを実際に使ってみましょう。

さきほどのfloorオブジェクトを複製して少し上に配置、Box Collider 2DのIs Trigerにチェックを入れます。

下記スクリプトを書いてアタッチします。プレイヤーオブジェクトが衝突すると消えるスクリプトです。

衝突の影響を受けることなくすり抜け消えました。

OnTrigger系の関数まとめ

3DのCollider の場合

OnTriggerEnterColliderが他のColliderに接触したとき
OnTriggerStay Colliderが他のColliderに接触している間
OnTriggerExitCollidergaが他のColliderから離れたとき

2D のCollider の場合

OnTriggerEnterColliderが他のColliderに接触したとき
OnTriggerStay Colliderが他のColliderに接触している間
OnTriggerExitCollidergaが他のColliderから離れたとき

OnTriggerEnterは状況によって非常によく使います。どんどん活用して覚えていきましょう。

今回の所は以上となります。

最後まで読んでいただきありがとうございました。

おすすめ記事【現役Unityエンジニアが厳選】Unityを学ぶのにおすすめのプログラミングスクール2選

Follow me!