【Unity】オブジェクト同士の衝突時にイベントを発生させる|OnCollisionEnter
ゲーム開発において、オブジェクト同士の衝突時にイベントを発生させることは必須だと思います。
そこで今回はオブジェクト同士が衝突したときにイベントを発生させるご方法を紹介します。
今回はボールが重力によって落下し床に衝突したときに、ボールの色を変化させるシーンを作成していきます。
本記事で紹介する内容は以下の通りです。
- OnCollisionEnterの使用方法
Contents
OnCollisionEnterの使用方法
衝突時にイベントを発生させる関数はOnCollisionEnterを使用します。
ここで一点注意があります。UnityでCharacterControllerを使用して動かしているオブジェクトの衝突判定は、OnControllerColliderHit以外では検出できません。
ここではどちらもCharacterControllerは使用していないオブジェクトを使用しますので、OnColliosionEnterを使用します。
では実際に使用方法を確認していきます。
はじめに今回の衝突対象となるSphereとPlane以下のような関係になるように設置してください。
次に、SphereにRigidbodyコンポーネントを追加します。
hierarchyビューでSphereを選択して、inspectorビューの最下部AddComponent→Physics→Rigidbodyを選択してください。
同じく以下赤枠SphereのAddComponent→New scriptを選択して新しいスクリプトを作成します。
名前は任意ですが、今回は「OnCollisionEnterSample」とします。
作成したスクリプトをテキストエディタで開いてください。
ProjectビューのAssetsの中に新しく作成したスクリプトがあると思います。
スクリプトを開いたら、プログラムを以下のように編集してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class OnCollisionEnterSample : MonoBehaviour { //OnCollisionEnter() private void OnCollisionEnter(Collision collision) { //Sphereが衝突したオブジェクトがPlaneだった場合 if(collision.gameObject.name=="Plane"){ //色を黒に変化させる GetComponent<Renderer>().material.color = Color.black; } } } |
ここまで設定したら、実行して確認してみましょう。
床に衝突したときに色が白→黒に変化していることがわかると思います。
まとめ
今回はオブジェクト同士の衝突時にイベントを発生させる方法を紹介しました。
衝突判定には他にも、オブジェクト同士が離れた瞬間のイベント発生や、オブジェクト同士がくっついている間にイベントを発生させる方法などがあります。
どんどん衝突判定の関連記事は随時アップしていきますので、乞うご期待ください。
この記事はいかがでしたか?
もし「参考になった」「面白かった」という場合は、応援シェアお願いします!