前提・実現したいこと
サイト(http://am1tanaka.hatenablog.com/entry/2015/04/19/174947)を参考にしながらUnityでブロック崩しを作っているのですが、得点を加算するところで上手くいきません。
CGameMan.csとCBlock.csに点数を追加するための文章を追加してから、ブロックが削除されなくなり、以下のエラーメッセージが表示されるようになりました。
メッセージの意味は分かるのですが、どこをどう修正すればいいのか分からず、質問させていただきました。
発生している問題・エラーメッセージ
NullReferenceException:object reference not set to an instance of an object CGameMan.initGame()(at Assets/script/CGameMan.cs:51)
NullReferenceException:object reference not set to an instance of an object CGameMan.addScore(Int32 add)(at Assets/script/CGameMan.cs:62)
該当のソースコード
C#
1//CBlock 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5 6public class CBlock : MonoBehaviour { 7 static int iBlockCnt = 0; 8 //壊したら入る点数(初期値は10点) 9 [SerializeField] 10 private int ADD_SCORE = 10; 11 // Use this for initialization 12 void Start () { 13 iBlockCnt++; 14 } 15 16 // Update is called once per frame 17 void Update () { 18 19 } 20 21 private void OnCollisionEnter(Collision collision) 22 { 23 CGameMan.me.addScore(ADD_SCORE); 24 Destroy(gameObject); 25 iBlockCnt--; 26 27 if (iBlockCnt <= 1) 28 { 29 Application.LoadLevel("Game"); 30 } 31 } 32} 33
C#
1//CGameMan 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using UnityEngine.UI; 6 7public class CGameMan : MonoBehaviour { 8 // 自分自身のインスタンス 9 public static CGameMan me = null; 10 // TextScoreのインスタンス 11 private Text textScore; 12 // TextLeftのインスタンス 13 private Text textLeft; 14 // 点数 15 private int iScore; 16 // 現在の残機。マイナスになるとゲームオーバー。 17 private int iLeft; 18 // 面が開始する時点での残機(初期設定では3回ミスでゲームオーバー) 19 [SerializeField] 20 private int INIT_LEFT = 2; 21 22 23 void Start () { 24 GameObject.Find("GameMan").SendMessage("initGame"); 25 } 26 27 28 29 // このオブジェクトを読み込み時に破壊させない 30 void Awake() 31 { 32 33 // 1つより多かったらすでに追加済みなので、このGameManは削除する 34 if (GameObject.FindGameObjectsWithTag("GameController").Length > 1) 35 { 36 Destroy(gameObject); 37 return; 38 } 39 40 //永続化 41 DontDestroyOnLoad(this); 42 // インスタンスを記録 43 me = this; 44 } 45 46 // ゲーム開始の初期化 47 public void initGame() 48 { 49 iScore = 0; 50 iLeft = INIT_LEFT; 51 // ゲームオブジェクトを探す 52 textScore = GameObject.Find("TextScore").GetComponent<Text>(); 53 textLeft = GameObject.Find("TextLeft").GetComponent<Text>(); 54 // 初期値を表示 55 textScore.text = iScore.ToString(); 56 textLeft.text = iLeft.ToString(); 57 } 58 59 //点数の加算処理 60 public void addScore(int add) 61 { 62 iScore += add; 63 textScore.text = iScore.ToString(); 64 } 65} 66
補足情報(FW/ツールのバージョンなど)
Unity 2018.1.0f2 Personal (64bit)
追記(TextScoreインスペクタ画像)
TextScoreオブジェクトを選択したときのインスペクタの画像を添付できますでしょうか
回答3件
あなたの回答
tips
プレビュー