概要
UnityでComponentの有効・無効を切り替えるとき、
図1のように、”enabled” 属性の値を切り替えていると思います。
では、これをより抽象化して、Collider以外のあらゆるコンポーネントの有効・無効を切り替えたくなったらどうするのでしょうか?
対応
その場合、 “Collider” の代わりに “MonoBehaviour” または “Behaviour” を変数の型として指定します(図2)。
すると図3のようにあらゆるコンポーネントをヒエラルキーから代入できるようになり、
あらゆるコンポーネントの状態を変更出来るようになります。
解説
Unityの全てのコンポーネントは”MonoBehaviour”を継承するように定められています。
なお “MonoBehaviour” は “Behaviour”、”Behaviour” は “Component” を、”Component” は “Object” クラスを継承しています。
そのため、”Component”でもコンポーネントの状態の有効/無効を切り替えられるかと思ったのですが、それはダメなようです。図4に示すように、enabledはBehaviourレベルで実装されています。
Componentには “GetComponent” や “SendMessage”といったメソッドが実装されていて、コンポーネントの中にはアクティブ状態を切り替えられないものもあるようです。