この記事でのバージョン
Unity 5.1.0f3 Personal
はじめに
以下のようにアニメーションと連動するように下層にコライダーを設定し、
Player等の他のコンポーネントを一番親のオブジェクトに設定した場合
衝突時に以下のようなコードではPlayerを取得出来ません。
private void OnCollisionEnter (Collision collision){ //コライダーとPlayerスクリプトが違うオブジェクトに設定されているため取得できない Player player = collision.gameObject.GetComponent<Player>(); }
ルートのオブジェクトはtransform.rootで取得できますが、
欲しいコンポーネントがrootにあるとは限らないので、
親や子オブジェクトも含めた範囲から指定のコンポーネントを取得するメソッドを作成しました。
GetComponentInParentAndChildren
以下がそのコードになります。
使い方はこのGameObjectExtension.csを作成し、
GetComponentを使う要領で以下のようにします。
Player player = gameObject.GetComponentInParentAndChildren<Player> ();
これで親や子オブジェクトも含めた範囲から指定のコンポーネントを取得
できるようになります。
問題点は指定のコンポーネントが複数ある場合、一つしか取れない事です。
そんな時はGetComponentsInParentAndChildrenを使うと
List<Player> _playerList = gameObject.GetComponentsInParentAndChildren <Player> ();
親や子オブジェクトも含めた範囲から指定のコンポーネントを全て取得できます。