DontDestroyOnLoadでオブジェクトを管理した際の質問です | Unity Forum | Tech Stadium Forum

DontDestroyOnLoadでオ...
 
通知
すべてクリア

DontDestroyOnLoadでオブジェクトを管理した際の質問です  

  RSS

Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1351
31/08/2020 8:49 pm  
DontDestroyOnLoadでオブジェクトを管理した際の質問です。
当該オブジェクトにSerializeFieldで他オブジェクトを参照させていますが、ゲーム2周目時に参照が切れてしまう状態です。
参照を切らさない方法、若しくはそもそもの設計がいけないので改善等、ご教授のほどお願い致します。処理の詳細を下記します。
 
【1周目】
1. タイトル画面でプレイヤー名を入力。inputFieldを参照しRankingMangerで名前を保持。
2. メイン画面でゲーム実行。勝者をGameManagerが判定。
3. GameManagerからRankingMangerへ勝者の情報を送る。それに応じた名前をRankingMangerがDBに対しデータ送信。ボタンへ再びタイトルへ。
 
【2周目】
1. RankingManagerにSerializeFieldで参照させていたinputField等が切れている状態
This topic was modified 4年前 by Student

引用
Teacher
(@admin)
メンバー Admin
結合: 5年前
投稿: 1318
31/08/2020 8:50 pm  

こちらはDontDestroyOnLoadで指定されているRankingManagerはシーンを跨いで存在しますが、Titleシーン自体はゲームシーンへ遷移されるたびに破棄されます。

そのため再度タイトルシーンに戻ってきた際にはそのタイトルシーンは初めに紐づきを行ったシーンとは別物なので、そのシーンに存在するInputFieldも更新され、RankingManagerとの紐づきを再度行う必要があります。SerializeFieldでの参照はエディタ上からしか行えないため、二週目にタイトルシーンに戻ってきた時のことを考えSerializeFieldではなく
スクリプトからGameObjectやほかのコンポーネントを参照するためにFindを用いるのが良いのではないでしょうか。
(Findはコストがかかるため多用はお勧めしませんが、今回のような場合では有用です。)


返信引用
Student
(@student)
メンバー Moderator
結合: 4年前
投稿: 1351
31/08/2020 8:51 pm  

何となくSerializeFieldで…と記述していましたが、こういう場合があるのですね…

有難うございます。


返信引用
共有:
タイトルとURLをコピーしました