前提・実現したいこと
現在、UnityにてSceneをロードしたら
NowLoading(ゲームによくある奴)が始まるシーンを作成しております。
一応、下記のソースでシーン自体は動くのですが
実行し終わった後に、エラーが出ます。
発生している問題・エラーメッセージ
MissngReferenceException:The object of type 'GameObject has been destroyed but you still trying to access it.
該当のソースコード
C#
1using UnityEngine; 2using System.Collections; 3using UnityEngine.UI; 4using UnityEngine.SceneManagement; 5 6public class Loading : MonoBehaviour 7{ 8 9// 非同期動作で使用するAsyncOperation 10private AsyncOperation async; 11// シーンロード中に表示するUI画面 12[SerializeField] 13private GameObject loadUI; 14// 読み込み率を表示するスライダー 15[SerializeField] 16private Slider slider; 17 18private void Awake() 19{ 20SceneManager.sceneLoaded += OnSceneLoaded;//イベントにメソッドを登録 21DontDestroyOnLoad(this.loadUI); 22} 23 24void OnSceneLoaded(Scene Loading, LoadSceneMode sceneMode) 25{ 26// ロード画面UIをアクティブにする 27loadUI.SetActive(true); 28 29// コルーチンを開始 30StartCoroutine("LoadData"); 31} 32 33 34IEnumerator LoadData() 35{ 36// シーンの読み込みをする 37async = SceneManager.LoadSceneAsync("TestScene"); 38 39// 読み込みが終わるまで進捗状況をスライダーの値に反映させる 40while (!async.isDone) 41{ 42var progressVal = Mathf.Clamp01(async.progress / 0.9f); 43slider.value = progressVal; 44yield return null; 45} 46} 47} 48
試したこと
半日調べて、
・デストロイ(削除)したのにアクセスし続けている
・なので、nullかDontDestroy(消さない)処理を追加する必要がある。
・しかし、DontDestroyだけだとobjが増え続ける。
ということがわかりました。
しかし、エラーで指摘されている
private GameObject loadUIは、
・boolean型でnullは入れることができない
・かといってDestroy処理のifを3つほどサイトを参考にして書いてみたが
エラーを吐いてうまくいかず...
以上の点で躓いていました。
お手数おかけしますが、皆さんの知恵をお借りしたいです。
よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
Unity 2019.2.11f
DontDestrouを追記するべく
GameObject.DontDestroy(loadUI);と記述すると
'GameObject' does not contain a definition for 'DontDestroy'とエラーが出ます。
ゲームオブジェクトがDontDestroyに含まれませんと言っているのは分かるのですが、
なぜ含まれないのか?がわかりません。
回答1件
あなたの回答
tips
プレビュー