#エラー
玉ころがしゲームで一回のゲームが終わった後リトライのボタンを押してシーンを読み直すとスコアを表示するスクリプトでエラーが起きていましたどこを直せばいいのでしょうか?
error
1MissingReferenceException: The object of type 'Text' has been destroyed but you are still trying to access it. 2Your script should either check if it is null or you should not destroy the object. 3UnityEngine.EventSystems.UIBehaviour.IsActive () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/UIBehaviour.cs:28) 4UnityEngine.UI.Graphic.SetVerticesDirty () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Graphic.cs:223) 5UnityEngine.UI.Text.set_text (System.String value) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Text.cs:213) 6ScoreTxt.OnAddScore (System.Int32 score) (at Assets/script/ScoreTxt.cs:27) 7DataManager.AddScore (System.Int32 addScore) (at Assets/script/DataManager.cs:45) 8item.OnTriggerEnter (UnityEngine.Collider hit) (at Assets/script/item.cs:48)
##ScoreTxt.cs
C#
1using UnityEngine; 2using UnityEngine.UI; 3 4public class ScoreTxt : MonoBehaviour 5{ 6 /// <summary> 7 /// テキストを設定 8 /// </summary> 9 [SerializeField] Text TxtRender; 10 11 void Start() 12 { 13 //初期スコアを設定 14 OnAddScore(DataManager.Instance.Score); 15 16 // スコア追加イベントを受け取る 17 DataManager.Instance.OnAddScore += OnAddScore; 18 19 } 20 21 /// <summary> 22 /// スコアがカウントされると呼ばれる 23 /// </summary> 24 /// <param name="score">Score.</param> 25 void OnAddScore(int score) 26 { 27 TxtRender.text = score.ToString(); 28 } 29}
##GameResult.cs
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.SceneManagement; 5using UnityEngine.UI; 6 7public class GameResult : MonoBehaviour 8{ 9 private int highScore; 10 public static bool Result; 11 public Text resultScoreText; 12 public Text resultText; 13 public Text bestScoreText; 14 public GameObject resultUI; 15 // Start is called before the first frame update 16 void Start() 17 { 18 Result=false; 19 if (PlayerPrefs.HasKey("HighScore")) 20 { 21 highScore=PlayerPrefs.GetInt("HighScore"); 22 }else 23 { 24 highScore=0; 25 } 26 27 } 28 29 // Update is called once per frame 30 void Update() 31 { 32 if (Timer.nowtime==0f) 33 { 34 Result=true; 35 resultUI.SetActive(true); 36 int result= Mathf.FloorToInt(DataManager.Instance.Score); 37 resultScoreText.text="ResultScore:"+result; 38 bestScoreText.text="BestScore:"+highScore; 39 if (highScore<result) 40 { 41 resultText.text="HighScore!!"; 42 PlayerPrefs.SetInt("HighScore",result); 43 } 44 } 45 } 46 public void OnRetry(){ 47 DataManager.Instance.resetScore(); 48 SceneManager.LoadScene("Stage1"); 49 } 50 public void BackTitle(){ 51 SceneManager.LoadScene ("Title"); 52 } 53 54} 55
##DataManager.cs
C#
1using System; 2using UnityEngine; 3 4public class DataManager : MonoBehaviour 5{ 6 //シングルトン化 DataManager.Instanceで何処からでもアクセスできます。 7 public static DataManager Instance 8 { 9 get{ 10 if (_instance == null) 11 { 12 _instance = LoadInstance(); 13 } 14 return _instance; 15 } 16 } 17 static DataManager _instance; 18 19 /// <summary> 20 /// スコアが追加されたのを通知 21 /// </summary> 22 public event Action<int> OnAddScore = delegate {}; 23 24 /// <summary> 25 /// 現在のスコア 26 /// </summary> 27 /// <value>The score.</value> 28 public int Score{ get; private set; } 29 30 void Awake() 31 { 32 if(_instance != null 33 && _instance != this) 34 { 35 Destroy(gameObject); 36 } 37 } 38 39 public void AddScore(int addScore) 40 { 41 if (!GameResult.Result) 42 { 43 Score += addScore; 44 //通知 45 OnAddScore(Score); 46 } 47 //スコアを加算 48 49 } 50 public void resetScore() 51 { 52 if (!GameResult.Result) 53 { 54 Score = 0; 55 //通知 56 57 } 58 //スコアを加算 59 60 } 61 62 /// <summary> 63 /// インスタンスの設定 64 /// </summary> 65 public static DataManager LoadInstance() 66 { 67 var instance = FindObjectOfType<DataManager>(); 68 69 if(instance == null) 70 { 71 var go = new GameObject("DataManager", new []{typeof(DataManager) }); 72 instance = go.GetComponent<DataManager>(); 73 } 74 75 DontDestroyOnLoad(instance.gameObject); 76 return instance; 77 } 78}

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/26 13:10
2019/04/26 13:10