個人的勉強メモ置き場

プログラミングど素人のメモ置き場

StartとAwakeの違い【メモ】

6月から7月前半に掛けてサボ体調が悪かったので結構忘れていることも多いこの頃
ふと「StartとAwakeの違いってなんだっけ?」となった。AwakeはStartより呼び出されるのが早いんだっけか…?そんなわけで忘れないようにメモ

Start

公式マニュアルを見るとスクリプトインスタンスが有効な場合のみ最初のフレームのアップデート前に呼び出されるものらしい

Awake

こちらも公式マニュアルを見ると

この関数は常に Start 関数の前およびプレハブのインスタンス化直後に呼び出されます。(もしゲームオブジェクトがスタートアップ時に無効である場合、有効になるまで Awake は呼び出されません。

なんとこのAwake関数、スクリプトが非アクティブでも実行される。マジか

f:id:zykb:20200802045152p:plain
Testは非アクティブだがAwakeは呼ばれている

使い分けの注意点

Awakeのほうが先に呼ばれるんなら全部Awakeに書いていいのでは?と思わないこともないけど、場合によってはエラーとなることも

というのもAwake同士の順番はランダムなのでAwake内で他のスクリプトを参照するとNull参照となる可能性が出てくるため

Awakeでは初期化処理にとどめるのが良いみたいですね

まとめ

・AwakeはStartより先に呼び出される
・Null参照エラーの可能性もあるためAwake内の記述は気を付ける

ちなみにオブジェクトが有効となるときに呼び出されるOnEnableもある
(Awake → OnEnable → Start)