takashiskiのブログ

覚書の殴り書き

AwakeとStartの違い

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使うべきっぽい。