GameObjectについている全てのコンポーネントを取得する
GameObjectについている全てのコンポーネントを取得するGetComponentsSampleというクラスを作ります。
上の画像のように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> ();
で取得できるようです。