【Unity】オブジェクト同士が衝突している間にイベントを発生させる|OnCollisionStay
オブジェクト同士が衝突している間にイベントを発生させる方法をご紹介します。
オブジェクトが衝突していることを認識する際にも使用できるため、使用方法を知っていると非常に便利です。
今回はSphere(球)がPlane(平面)と衝突している間だけSphereの色を青に、離れた瞬間に赤にするシーンを作成していきます。
本記事でご紹介する内容は以下の通りです。
- OnCollisionStayの使用方法
Contents
OnCollisionStayの使用方法
オブジェクトが衝突している間、イベントを発生させる関数はOnCollisionStayです。
まずはじめにSphere(球)とPlane(平面)を以下のような位置関係で設置して、SphereにRigidbodyを追加します。
Rigidbodyを追加したら、SphereをバウンドさせるためにPhysicMaterialを追加します。
ここまでの操作方法はOnCollisionExitの使用方法を紹介したこちらの記事で詳しくご紹介しています。
それでは実際にOnCollisionStayを使用してオブジェクト同士が衝突している間にイベントを発生させたいと思います。
HierarchieビューのSphereを選択してください。次に、Inspectorビュー最下部のAddComponentからNewScriptを選択して、新しいスクリプトを作成してください。
新しく作成するスクリプトの名前は任意ですが、今回は「OnCollisionStaySample」とします。
作成したスクリプトをエディターで開いて、以下のように編集してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class OnCollisionStaySample : MonoBehaviour { //OnCollisionStay関数 private void OnCollisionStay(Collision collision){ //SphereがPlaneと衝突している場合 if (collision.gameObject.name == "Plane"){ //Sphereの色を青にする GetComponent<Renderer>().material.color = Color.blue; } } //OnCollisionExit関数 private void OnCollisionExit(Collision collision){ //SphereがPlaneと離れた場合 if(collision.gameObject.name == "Plane"){ //Sphereの色を赤にする GetComponent<Renderer>().material.color = Color.red; } } } |
今回は離れたときに色を変えるためにOnCollisionExitも使用しています。OnCollisionExitの詳細はこちらの記事をご参考ください。
では実際に実行して確認してみましょう。
SphereがPlaneから離れた瞬間に色が赤になり、バウンドが終わりPlaneと衝突している間、青に変化しているのがわかると思います。
まとめ
OnCollisionStayについてご紹介してきました。
これまで他にOnCollisionEnter、OnCollisionExitもご紹介してきました。どの関数もとても簡単に衝突判定を実装できることがわかると思います。
ご自身が必要な関数を適切に用いて、ゲーム開発をスムーズに進めてみてください。
この記事はいかがでしたか?
もし「参考になった」「面白かった」という場合は、応援シェアお願いします!