的確なタイトル思いつかなくてすいません汗
シーンを切り替える直前にクラスデータをシーン間で残り続けるオブジェクトに格納させて、切り替え後のシーンでそのデータを取得するようにスクリプトを作成中です。
以下に示すコードのように、LoadScene()の直前にクラスデータをオブジェクトに格納する処理を書くと、切り替え後のシーンでオブジェクトがないとエラーが出てしまいます。
その時のエラーが以下です。
NullReferenceException: Object reference not set to an instance of an object
C#
1public void YesClicked() 2 { 3 //複数シーンで存在するオブジェクトにクラスデータを格納 4 //別オブジェクトにアタッチされたスクリプトで実行 5 playSaveData.SetPlaySaveData(new SaveData()); 6 SceneManager.LoadScene("Scenario"); 7 }
C#
1//Scenarioシーン内で実行 2void Awake() 3{ 4 //"PlaySaveDataHolder"が複数のシーンで存在するオブジェクト 5 //saveData変数に前のシーンで格納したクラスデータを格納 6 saveData = GameObject.Find("PlaySaveDataHolder") 7 .GetComponent<PlaySaveDataHolder>().GetPlaySaveData(); 8 nowData = saveData.Clone(); //この行で上記のエラーが発生 9
[ シーン切り替え後にクラスデータを取得できたパターン ]
上のコードだとエラーが発生して、クラスデータを取得できなかったのですが、
以下のコードのように、
取得したいデータを格納する処理とLoadScene()の実行までにワンクッション挟むようにしたら無事クラスデータを取得することができました。
クッションは、クラスデータを格納してからボタンを出現させて、そのボタンを押したらシーンを切り替える
というものです。
C#
1public void ResetSaveData(int dataNumber) 2 { 3 resetNumber = dataNumber; 4 playSaveData.SetPlaySaveData(new SaveData()); 5 6 //ボタン出現処理 7 Sequence panelSeq = DOTween.Sequence(); 8 panelSeq.AppendCallback(()=> 9 { 10 checkPanel.SetActive(true); 11 }) 12 .Append(checkGroup.DOFade(0.8f,0.5f)); 13 panelSeq.Play(); 14 } 15 16public void YesClicked() 17 { 18 SceneManager.LoadScene("Scenario"); 19 }
[ 質問 ]
まず大前提の質問として、別オブジェクトにアタッチされたスクリプトのメソッドを呼び出した場合、そのメソッドの処理が終わるまで、呼び出した側の処理は止まるのか、
呼び出したメソッドと、呼び出した側の後続の処理が並列処理の様なイメージで実行されるのかどっちなのでしょうか。
並列して実行されるとしたら、クラスデータの格納が完了する前にシーンの切り替えが行われて、上記のようなエラーが発生したのではないかと考えています。
1つ目のコードでエラーが発生する明確な理由が今回の質問内容です。
ご教授お願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/07/12 00:33