スクリプトの初期化処理の順番を制御する

スキルのマスターデータ的なものを読みこむMasterManagerと、所持スキルのコードからマスターを参照して処理を行うPlayerがある場合。
それまで正常に動作していたのに、一旦unityを再起動したらエラーが発生しだした。
MasterManagerとPlayerの初期化を行う際に、どちらもStartで初期化を行っていたんだけど、どうやら再起動前後でその実行順が変わってしまったらしい。

http://docs.unity3d.com/ja/current/Manual/class-ScriptExecution.html
これによると、異なるスクリプト間でのAwakeやStartやonEnableの実行順は不定らしい。
今回はMasterManagerだけは確実に先に実行させたい。
見つけた解決策は2つ。

実行順をExecutionOrderで制御する


スクリプトからExecutionOrderボタンを押すと設定画面が出てくる。
設定方法は前述のhttp://docs.unity3d.com/ja/current/Manual/class-ScriptExecution.html
ここで登録されているものはその順番でAwakeやStartやその他が実行される。
default time内のスクリプト(登録していないスクリプト)の実行順は不定

MasterManagerの初期化をAwakeで行う。

Order of Execution for Event Functions - Unity マニュアル

シーンに追加されたオブジェクトで 全て のスクリプトは Start や Update、その他の関数が呼び出される前に Awake と OnEnable 関数が呼び出されることに注意してください。

とあるので、MasterManagerの初期化処理をAwakeで行えば確実に先に実行される。こっちのほうがスマートな感じ。

どちらでやるべきか。

基本的にそのスクリプト内で完結させられる初期化処理はAwakeで行うべきなんだろう。
他のスクリプトと連携する部分だけStartに持っていって、それでも更に順番を制御したい時だけExecutionOrderで、あくまで例外的な処置として書いていく感じで。