ゲーム制作勉強中!あこがれだったプログラマーに今からなろう!

昔、あこがれていたプログラマー。今からでも勉強してみようと思い立ち、チャレンジ開始! 勉強メモや、悪戦苦闘な日々の記録です。

シングルトンの罠?シーン遷移後のオブジェクトへの参照再セット

 

一夜明けて、もやもやしながら仕事を終えて、さて、昨夜の不具合オンパレードの解決を考えよう。

 

まずは何が起こっているのか確認する。

Game Managerのアタッチが外れまくってるわ・・・

エラーが出まくってるわ。

 

Game Managerはシングルトン構成にしているのだが、リスタート(シーンのリロード)で、他のオブジェクト達が再生成している様なものだから、アタッチが外れてしまうのだろうか。

ちなみに、シングルトン構成を外してみると、リスタートでアタッチが外れる事はなく、何も不具合は発生しなかった。

 

だからと言って、シングルトン構成を止めるのは勿体無いので、シーンのリロード時に他のオブジェクトを再セットさせる方法を考えてみた。

 

GameManagerのStartに、アタッチしたいオブジェクトをGameObject.Findで参照させようとしたが、これはうまくいかなかった。

想定だが、シングルトン構成なので、そもそもGame Managerの再生成がなく、Startが走ることもないのだろう。

ならば、Game Managerに必要なオブジェクトへの参照を再設定するスクリプトを、シーンのリロードで生成される、どれかのオブジェクトにアタッチすれば解決するような気がする。

そう思いながら、あっちこっちのサイトを調べていたら、解決にぴったりの記事があったので、さっきの案ではなく、この方法を試してみる事にした。

tech.pjin.jp

今回に関係ない部分は省いてます😆

Startでシーンロード時のイベントに、自分で作成したSceneLoadedメソッドを追加。

SceneLoadedメソッドは、リスタートでシーンのロードが完了した際に実行されるらしいので、ここでGame Managerに再セットしたいオブジェクトをGameObject.Findさせた。

 

結果、不具合は無事解消!✌️

来週から1週間ほど家に帰れないから、その前にもやもやが解消できて良かった〜〜

youtu.be