【Unity】オブジェクト同士が離れた瞬間にイベントを発生させる|OnCollisionExit


今回はオブジェクト同士が離れた瞬間にイベントを発生させるご方法を紹介します。

衝突した瞬間のみではなく、離れた瞬間にも処理を入れたいという方はぜひご参考ください。

今回はボールが床にバウンドして、離れた瞬間に色が変化するシーンを作成していきます。

本記事でご紹介する内容は以下の通りです。

  • OnCollisionExitの使用方法

OnCollisionExitの使用方法

オブジェクト同士が離れた瞬間にイベントを発生する関数はOnCollisionExitを使用します。

まずはじめにSphere(球)とPlane(平面)を以下のような位置関係で設置して、SphereにRigidbodyを追加します。

ここまでの操作方法はOnCollisionEnterの使用方法を紹介したこちらの記事で詳しくご紹介しています。

床・球位置関係

次にSphereをバウンドさせるためにPhysicMaterialを作成し、Sphereに追加します。

以下赤枠メニューバーAssets→Create→PhysicMaterialを選択してください。

PhygicMaterial

選択するとAssetsに新しいPhysicMaterialが作成されますので、任意の名前をつけてください。今回は「Bound」とします。

Boundマテリアル

次にBoundの設定をします。

以下赤枠inspectorビュー→Bouncinessの値を1に変更してください。

Bounciness

次にこのBoundマテリアルをSphereに追加します。

以下のようにAssetsのBoundをSphereにドラッグ&ドロップします。

Bound設定

これでSphereをバウンドさせることができます。

実際に実行して確認してみましょう。

BoundCheck

ここからSphereとPlaneが離れた瞬間に色が変わるようなスクリプトを作成していきます。

HierarchieビューでSphereを選択してください。次にInspectorビューの最下部AddComponentからNewScriptを選択して新しいスクリプトを選択してください。

名前は任意ですが、今回は「BoundChangeColor」とします。

スクリプトを編集していきます。

作成したスクリプトをテキストエディターで開いて、以下のように編集してください。

プログラムを簡単に説明します。

まずSphereがPlaneから離れた瞬間にOnCollisionExitが呼び出されます。次にランダムに色を生成し、変数randに代入します。

最後にSphereが離れたオブジェクトがPlaneだった場合にSphereの色をrandに変更します。

以上がプログラムの簡単な流れです。

では実際に実行して確認してみましょう。

BoundColorCheck

実際に離れた瞬間に色が変化していることがわかると思います。

またこのことから、SphereはPlaneと3回衝突し、2回離れていることがわかります。

まとめ

今回はOnCollisionExitを使用して、オブジェクトが離れた瞬間にイベントを発生させる方法をご紹介しました。

プログラミングを多少必要とするものの、簡単に実装できることがわかると思います。

このようにプログラミングは難しいものと思われがちですが、ぜひチャレンジしてみてください。


Furui