明日の自分へ

主にUnityのゲーム開発に関することを呟いていく予定

【Unity】イベント関数の実行順序のおさらい

Unityのイベント関数(AwakeとかStartとか)で躓いたのが2度目なので備忘録

結論

  1. 他者に公開するプロパティはAwakeで初期化しよう。
  2. 特に必要でなければ、内部状態は各オブジェクトの責任範囲のもとで変更させよう。

起きたこと

あるGameObjectAの初期化時に、別のGameObjectBを取得して、ObjectBの設定を変更するとNullRefrenceが発生した。
具体的にはRigidBody.bodyTypeの変更だが、RigidBodyコンポーネントが処理時点でNullになっていた。

やったこと

結論の2.で解決させた。
1.は1度目の躓きで起きていたので、併せて記載している。

確認

各イベント関数実行時に、Prefabからインスタンスを生成するGameObjectから取得を試みる。
NullだとAccessableが表示されず、そうでないときにAccessableが表示される。
インスタンス生成はAwake時に行われているが、恐らく起動順序の関係で取得側はStartで初めてアクセスできるようになっている。
(VisualStudioの更新でPCを再起動したら、挙動が変わってしまった...。再起動前はAwakeでもアクセス出来てたはず)
f:id:e684-creaim:20201011133915p:plain