【Unity】オブジェクト同士が離れた瞬間にイベントを発生させる|OnCollisionExit
今回はオブジェクト同士が離れた瞬間にイベントを発生させるご方法を紹介します。
衝突した瞬間のみではなく、離れた瞬間にも処理を入れたいという方はぜひご参考ください。
今回はボールが床にバウンドして、離れた瞬間に色が変化するシーンを作成していきます。
本記事でご紹介する内容は以下の通りです。
- OnCollisionExitの使用方法
Contents
OnCollisionExitの使用方法
オブジェクト同士が離れた瞬間にイベントを発生する関数はOnCollisionExitを使用します。
まずはじめにSphere(球)とPlane(平面)を以下のような位置関係で設置して、SphereにRigidbodyを追加します。
ここまでの操作方法はOnCollisionEnterの使用方法を紹介したこちらの記事で詳しくご紹介しています。
次にSphereをバウンドさせるためにPhysicMaterialを作成し、Sphereに追加します。
以下赤枠メニューバーAssets→Create→PhysicMaterialを選択してください。
選択するとAssetsに新しいPhysicMaterialが作成されますので、任意の名前をつけてください。今回は「Bound」とします。
次にBoundの設定をします。
以下赤枠inspectorビュー→Bouncinessの値を1に変更してください。
次にこのBoundマテリアルをSphereに追加します。
以下のようにAssetsのBoundをSphereにドラッグ&ドロップします。
これでSphereをバウンドさせることができます。
実際に実行して確認してみましょう。
ここからSphereとPlaneが離れた瞬間に色が変わるようなスクリプトを作成していきます。
HierarchieビューでSphereを選択してください。次にInspectorビューの最下部AddComponentからNewScriptを選択して新しいスクリプトを選択してください。
名前は任意ですが、今回は「BoundChangeColor」とします。
スクリプトを編集していきます。
作成したスクリプトをテキストエディターで開いて、以下のように編集してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BoundChangeColor : MonoBehaviour { //OnCollisionExit() private void OnCollisionExit(Collision collision) { //Color型変数randにランダムな色を代入する Color rand = new Color(Random.value, Random.value, Random.value, 1.0f); //SphereがPlaneから離れた場合 if(collision.gameObject.name == "Plane"){ //Sphereの色をrandに変更する GetComponent<Renderer>().material.color = rand; } } } |
プログラムを簡単に説明します。
まずSphereがPlaneから離れた瞬間にOnCollisionExitが呼び出されます。次にランダムに色を生成し、変数randに代入します。
最後にSphereが離れたオブジェクトがPlaneだった場合にSphereの色をrandに変更します。
以上がプログラムの簡単な流れです。
では実際に実行して確認してみましょう。
実際に離れた瞬間に色が変化していることがわかると思います。
またこのことから、SphereはPlaneと3回衝突し、2回離れていることがわかります。
まとめ
今回はOnCollisionExitを使用して、オブジェクトが離れた瞬間にイベントを発生させる方法をご紹介しました。
プログラミングを多少必要とするものの、簡単に実装できることがわかると思います。
このようにプログラミングは難しいものと思われがちですが、ぜひチャレンジしてみてください。
この記事はいかがでしたか?
もし「参考になった」「面白かった」という場合は、応援シェアお願いします!