質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

2726閲覧

[ Unity ] シーンの切り替えと、直前の処理の(時間的?)関係についての質問

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/07/11 11:57

的確なタイトル思いつかなくてすいません汗

シーンを切り替える直前にクラスデータをシーン間で残り続けるオブジェクトに格納させて、切り替え後のシーンでそのデータを取得するようにスクリプトを作成中です。
以下に示すコードのように、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つ目のコードでエラーが発生する明確な理由が今回の質問内容です。
ご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

どっちなのでしょうか。

処理内容によります。つまりその処理が非同期なのかどうかによります。
今回の場合は自前の保存処理ですが、その自前の保存処理が非同期なのか、そしてその自前の保存処理が使っている API での処理が非同期なのかによります。

投稿2020/07/11 12:17

bboydaisuke

総合スコア5275

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/07/12 00:33

ありがとうございます。 確認したところおそらく同期処理になっていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問