【Unity】あらゆるコンポーネントをスクリプトから有効化/無効化する

概要

UnityでComponentの有効・無効を切り替えるとき、

図1.具象コンポーネントの無効化

図1のように、”enabled” 属性の値を切り替えていると思います。

では、これをより抽象化して、Collider以外のあらゆるコンポーネントの有効・無効を切り替えたくなったらどうするのでしょうか?


対応

その場合、 “Collider” の代わりに “MonoBehaviour” または “Behaviour” を変数の型として指定します(図2)。

図2.一般的なコンポーネントの非有効化

すると図3のようにあらゆるコンポーネントをヒエラルキーから代入できるようになり、

図3.コンポーネントの指定

あらゆるコンポーネントの状態を変更出来るようになります。


解説

Unityの全てのコンポーネントは”MonoBehaviour”を継承するように定められています。


なお “MonoBehaviour” は “Behaviour”、”Behaviour” は “Component” を、”Component” は “Object” クラスを継承しています。

そのため、”Component”でもコンポーネントの状態の有効/無効を切り替えられるかと思ったのですが、それはダメなようです。図4に示すように、enabledはBehaviourレベルで実装されています。

図4.Behaviourの実装

Componentには “GetComponent” や “SendMessage”といったメソッドが実装されていて、コンポーネントの中にはアクティブ状態を切り替えられないものもあるようです。

作成者: rarafy

2013年くらいからUnityを触っているかもしれません。 特に書くこともありませんが、趣味は部屋の掃除です。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です