読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

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

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


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

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


はじめに

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

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


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

f:id:kan_kikuchi:20161003132516j:plain


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

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


無効になるメソッド

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

以下の通りです。

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


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

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

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


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

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


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


無効にならないメソッド

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


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

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

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


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

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


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

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