(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!

    

Inspector上でコンポーネントのチェックボックスが表示されない場合と、無効にしていても実行されるメソッドの話【Unity】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 5.4.0f3


はじめに

GameObjectに付けたコンポーネントは、Inspector上にチェックボックスが表示され、

有効無効を切り替えることができます。


ただ稀にこのチェックボックスが表示されないことがあります。

f:id:kan_kikuchi:20161003132516j:plain


今回はそんな場合がどんな時か、

ついでにチェックを外していても(無効にしていても)実行されるメソッドの話です。


無効になるメソッド

そもそもenabledを無効にすると言っても、何が無効になっているかという話ですが、

以下の通りです。

MonoBehaviour を無効化するチェックボックス(エディター上)により Start()、Awake()、Update()、FixedUpdate()、および OnGUI() が実行されなくなります。
もし、これらのいずれも存在しない場合はチェックボックス自体が表示されません。


------------追記

enabledを無効にしてもAwakeだけは実行されるようです。

ドキュメントを見ると2017.2の時点で変わってるのですが、


f:id:kan_kikuchi:20180305190822j:plain
f:id:kan_kikuchi:20180305190938j:plain


実際に試してみた所、5.5や5.4、5.3においてもenabledを無効にしてもAwakeだけは実行されました。

なので、おそらくドキュメントが間違っていたようです。

------------追記おわり


ついでにさきほどの答えもでてますが、

ようはenabledをfalseにすると(チェックを外すと)特定のメソッドが実行されなくなり

その特定のメソッドが一つもなければチェックボックス自体が表示されないということです。


ちなみに記載はありませんでしたが、LateUpdateも対象に含まれているので、

他にも記載のないメソッドがあるかもしれません。


なお、チェックボックスが表示されずとも、プログラムでenabledを切り替える事は可能です。


無効にならないメソッド

実はenabledをfalseにしても、全てのメソッドが実行されないわけではありません。


例えば、自分で作ったpubilcなメソッドを他のクラスから実行した場合は、

enabledをfalseにしていても通常通り実行されます。

script.enabled = false;
script.Method();//実行される


もちろん、Start等のメソッドもpublicにすれば

自動では実行されませんが、外から実行することは可能です。


また、自動で実行されるメソッドでも

OnCollisionEnter等のメソッドはenabledをfalseにしても実行されるので注意が必要です。