通知
すべてクリア
31/08/2020 8:49 pm
DontDestroyOnLoadでオブジェクトを管理した際の質問です。
当該オブジェクトにSerializeFieldで他オブジェクトを参照させていますが、ゲーム2周目時に参照が切れてしまう状態です。
参照を切らさない方法、若しくはそもそもの設計がいけないので改善等、ご教授のほどお願い致します。処理の詳細を下記します。
当該オブジェクトにSerializeFieldで他オブジェクトを参照させていますが、ゲーム2周目時に参照が切れてしまう状態です。
参照を切らさない方法、若しくはそもそもの設計がいけないので改善等、ご教授のほどお願い致します。処理の詳細を下記します。
【1周目】
1. タイトル画面でプレイヤー名を入力。inputFieldを参照しRankingMangerで名前を保持。
2. メイン画面でゲーム実行。勝者をGameManagerが判定。
3. GameManagerからRankingMangerへ勝者の情報を送る。それに応じた名前をRankingMangerがDBに対しデータ送信。ボタンへ再びタイトルへ。
1. タイトル画面でプレイヤー名を入力。inputFieldを参照しRankingMangerで名前を保持。
2. メイン画面でゲーム実行。勝者をGameManagerが判定。
3. GameManagerからRankingMangerへ勝者の情報を送る。それに応じた名前をRankingMangerがDBに対しデータ送信。ボタンへ再びタイトルへ。
【2周目】
1. RankingManagerにSerializeFieldで参照させていたinputField等が切れている状態
1. RankingManagerにSerializeFieldで参照させていたinputField等が切れている状態
This topic was modified 4年前 by Student
31/08/2020 8:50 pm
こちらはDontDestroyOnLoadで指定されているRankingManagerはシーンを跨いで存在しますが、Titleシーン自体はゲームシーンへ遷移されるたびに破棄されます。
そのため再度タイトルシーンに戻ってきた際にはそのタイトルシーンは初めに紐づきを行ったシーンとは別物なので、そのシーンに存在するInputFieldも更新され、RankingManagerとの紐づきを再度行う必要があります。SerializeFieldでの参照はエディタ上からしか行えないため、二週目にタイトルシーンに戻ってきた時のことを考えSerializeFieldではなく
スクリプトからGameObjectやほかのコンポーネントを参照するためにFindを用いるのが良いのではないでしょうか。
(Findはコストがかかるため多用はお勧めしませんが、今回のような場合では有用です。)
31/08/2020 8:51 pm
何となくSerializeFieldで…と記述していましたが、こういう場合があるのですね…
有難うございます。