いろいろガンガンいこうぜ。体も大事に

普段はJavaでAndroidアプリ開発しているプログラマーのブログです。

GameObjectについている全てのコンポーネントを取得する

GameObjectについている全てのコンポーネントを取得するGetComponentsSampleというクラスを作ります。

f:id:MRStar:20140102140651p:plain

上の画像のようにGameObjectに,

  • Transform
  • BoxCollider
  • RigidBody
  • Sample0
  • Sample1
  • Sample2
  • GetComponentsSample

という並び順でひとつのGameObjectにコンポーネントを付与しています。

まず,MonoBehaviourクラスを継承した自作コンポーネントを取得します。 コンポーネントの型をGetTypeで取得して,型名をデバックログで表示します。

using UnityEngine;

public class GetComponentsSample : MonoBehaviour
{
    void Start ()
    {
        MonoBehaviour[] monoBehaviours = GetComponents<MonoBehaviour> ();
        foreach (var monoBehaviour in monoBehaviours){
            Debug.Log (monoBehaviour.GetType ().Name);
        }
    }
}

デバックログの出力結果は,

Sample0
Sample1
Sample2
GetComponentsSample

となりました。

次にビルドインコンポーネントも含めて表示して,型を取得,型名を表示します。

using UnityEngine;

public class GetComponentsSample : MonoBehaviour
{
    void Start ()
    {
        Component[] components = GetComponents<Component> ();
        foreach (var component in components){
            Debug.Log (component.GetType ().Name);
        }
    }
}

実行結果は

Transform
BoxCollider
RigidBody
Sample0
Sample1
Sample2
GetComponentsSample

となりました。

自作のクラス(MonoBehaviourのサブクラス)だけでいいならば

var behaviours = GetComponents<MonoBehaviour> ();

ビルドインコンポーネントも含めて取得するならば,

var components = GetComponents<Component> ();

で取得できるようです。