【Unity】OnCollisionEnterの衝突相手のゲームオブジェクトの名前を確認するには(親子の場合、親のオブジェクトも)
これを実現するためには、、ゲームオブジェクトの親オブジェクトを取得方法を知る必要があります
次の親子関係の一覧表示のコードをもとにして、衝突時の親(先祖)を辿るコードを作成していきます
親子関係の一覧を表示
Unityには、Transform
クラスの parent
プロパティを使用して、親子関係を表現することができます。このプロパティを使用して、先祖の一覧を表示することができます。
以下は、先祖の一覧を表示する方法の例です。この例では、オブジェクトのすべての先祖を順番に表示するために、Transform
クラスの parent
プロパティを使用しています。
using UnityEngine;
public class AncestorList : MonoBehaviour
{
void Start()
{
Transform ancestor = transform.parent;
while (ancestor != null)
{
Debug.Log(ancestor.gameObject.name);
ancestor = ancestor.parent;
}
}
}
このスクリプトを GameObject
にアタッチすると、そのオブジェクトの親子関係で先祖の一覧を表示することができます。具体的には、Start()
メソッドが呼び出されたときに、transform.parent
を使用して親オブジェクトを取得し、その親オブジェクトの親オブジェクトを取得し、というように続けて、オブジェクトの先祖を順番に表示します。最後に、最上位の親オブジェクトに到達すると、parent
プロパティは null
を返すため、ループを終了します。
コライダーに衝突したゲームオブジェクトの名前を確認する
サンプルシーン
衝突される側
スクリプト
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CollisionCheck : MonoBehaviour
{
void OnCollisionEnter(Collision collision)
{
string root = $"{gameObject.name}のコライダーに [{collision.collider.gameObject.name}";
Transform ancestor = collision.collider.gameObject.transform.parent;
while (ancestor != null)
{
root += $" -> {ancestor.gameObject.name}";
ancestor = ancestor.parent;
}
root += "] が衝突した";
Debug.Log(root);
}
}
このスクリプトは、コライダーが衝突した際に呼び出されるOnCollisionEnter
メソッドを持っています。このメソッドは、引数にCollision
オブジェクトを受け取ります。Collision
オブジェクトには、衝突した相手の情報が含まれています。
OnCollisionEnter
メソッドでは、まずgameObject.name
を使用して、このスクリプトがアタッチされているオブジェクトの名前を取得しています。次に、Collision
オブジェクトから相手のオブジェクト名を取得して、root
変数に文字列として追加します。
その後、collision.collider.gameObject.transform.parent
を使用して、相手オブジェクトの親オブジェクト(祖先)を取得し、while
ループで祖先をたどっていきます。祖先がなくなるまで、root
変数に「->」とともに祖先のオブジェクト名を追加します。最後に、root
変数に"] が衝突した"という文字列を追加して、Debug.Log
メソッドでログ出力しています。
このスクリプトは、オブジェクト同士の衝突時に、自分自身と相手オブジェクトの名前を表示し、相手オブジェクトの親オブジェクト名をたどって表示することができます。
衝突する側
実行結果
Headのコライダーに [Nose -> Head -> Enemy] が衝突した
ディスカッション
コメント一覧
まだ、コメントがありません