前提・実現したいこと
ここに質問の内容を詳しく書いてください。
Unityで1対1の2Dシューティングゲームを作成しています。
発射した弾を敵(Bot)に当てることでHPを減らし、HPが0になったら、
GameObject(Bot)をSetActive(false)にし、Result画面に遷移するScriptを書いています。
発生している問題・エラーメッセージ
敵に弾を当ててHPを0にした際に、下記のエラーコードがはかれました。
該当する行は
「var b_hp = botScript.p_hp;」
になります。
エラーメッセージ NullReferenceException: Object reference not set to an instance of an object Hud.Update ()
該当のソースコード
c#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using UnityEngine.SceneManagement; 6 7 8public class Hud : MonoBehaviour 9{ 10 11 public Image p_hpGauge; // Player HP ゲージ 12 public Image b_hpGauge; // Bot HP ゲージ 13 14 public static bool winLose = true; //勝敗判定 15 16 // ポーズした時に表示するUIのプレハブ 17 private GameObject pauseUIPrefab; 18 // ポーズUIのインスタンス 19 private GameObject pauseUIInstance; 20 21 // Start is called before the first frame update 22 void Start() 23 { 24 25 } 26 27 // Update is called once per frame 28 void Update() 29 { 30 // Botを取得する 31 var bot = GameObject.Find("Bot"); 32 Debug.Log(bot); 33 if (bot != null) 34 { 35 //BotについているScriptを取得する 36 var botScript = bot.GetComponent<BotController01>(); 37 38 // HP のゲージの表示を更新する 39 var b_hp = botScript.p_hp; 40 var b_hpMax = botScript.p_hpMax; 41 b_hpGauge.fillAmount = (float)b_hp / b_hpMax; 42 } 43 else 44 { 45 b_hpGauge.fillAmount = 0; 46 winLose = true; 47 SceneManager.LoadScene("Result"); 48 } 49 50 // プレイヤーを取得する 51 var player = GameObject.Find("Player1"); 52 Debug.Log(player); 53 54 if (player != null) 55 { 56 //Player1についているScriptを取得する 57 var playerScript = player.GetComponent<PlayerController>(); 58 59 Debug.Log(playerScript.p_hp); 60 // HP のゲージの表示を更新する 61 var p_hp = playerScript.p_hp; 62 var p_hpMax = playerScript.p_hpMax; 63 p_hpGauge.fillAmount = (float)p_hp / p_hpMax; 64 65 } 66 else 67 { 68 p_hpGauge.fillAmount = 0; 69 winLose = false; 70 SceneManager.LoadScene("Result"); 71 } 72 73 } 74 75}
試したこと
Player1にもHPを持たせ、Botと同じScriptで処理させたところ、問題なくResultのSceneに遷移しました。
Debug.LogもPlayerのほうはnull判定となっていましたが、botはnullではありませんでした。
Object(Bot)のInspectorを確認したところチェックボックスは空欄になっていたため、
setActiveは正常動作しているように見えます。
setActiveでfalseにしたGameObjectを取得してしまっている問題を解決したいと思います。
補足情報(FW/ツールのバージョンなど)
Unity2019.4.11f1 Personal
回答1件
あなたの回答
tips
プレビュー