MonoBehaviourのライフサイクルについてはこんなまとめ画像がある。
http://www.richardfine.co.uk/2012/10/unity3d-monobehaviour-lifecycle/
これを念頭において、なんとなくStartの響きが好みじゃなかったからAwakeに毎度差し替えていた。ほとんど同等だと聞いたし、上の図だとAwakeのほうがよさげ?な気もしたし。
と思っていたらまさかの罠。EditorでdisabledにしたコンポーネントのAwakeが呼ばれている・・・。
どうやら、AwakeはdisabledなObjectでも呼ばれるようだ。よく見たらAwakeとOnEnableの左にも書いてある。
「AwakeはObjectの生成時に常に呼ばれるよ!OnEnableはコンポーネントがenabledになった時に呼ばれるよ!」
ってことが書いてあるんだと思う、たぶん。
っていうかOnEnableもあったのか。今まではStartとOnEnableを混同していた。enabledにしたときに毎回呼ばれると思ってたのだ・・・。
以下まとめ。
- Awakeはアタッチされたオブジェクトの生成時にコンポーネントの状態にかかわらず常に呼ばれる。
- OnEnableはコンポーネントがenabledになった時に常に呼ばれる。
- Startは生成後Enabledになったときに一度だけ呼ばれる。
- 生成時にenabledだった場合呼ばれるのはAwake -> OnEnable -> Start
- 生成時にdisabledだった場合はAwakeのみ
- enabledなコンポーネントをdisabled -> enabledとしたときに呼ばれるのはOnEnable
ってことは特に理由がなければStart使うべきっぽい。