前提・実現したいこと
unityで,敵キャラクターのHPが0になったときにColliderだけでなく全てのオブジェクトをDestroyしたい
発生している問題・エラーメッセージ
敵のColliderにアタッチしたScriptで残りHPの判定をし,自分の銃弾にアタッチしたScriptでHPが0になったときの処理をしようと思ったのですが,銃弾の方のScriptでNull Reference Exceptionが発生してしまいます.
NullReferenceException: Object reference not set to an instance of an object ATKenemyHP.OnCollisionEnter (UnityEngine.Collision other) (at Assets/program/ATKenemyHP.cs:22)
該当のソースコード
敵のColliderにアタッチしたScript
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Explode : MonoBehaviour 6{ 7 public GameObject explode; 8 public int enemyHP = 10; 9 public GameObject effectPrefab; 10 11 12 void OnCollisionEnter(Collision col) 13 { 14 if(col.gameObject.tag == "PlayATK") //PlayATKは銃弾についたタグです 15 { 16 Debug.Log(enemyHP); 17 // 敵のHPを1ずつ減少させる 18 enemyHP -= 1; 19 Instantiate(explode, this.transform.position, Quaternion.identity); 20 21 /*if (enemyHP == 0) 22 { 23 Debug.Log("END!"); 24 //このDestroyでは当たったColliderだけが消えてしまいます 25 Destroy(this.gameObject); 26 Instantiate(effectPrefab, transform.position, Quaternion.identity); 27 }*/ 28 } 29 } 30} 31
銃弾にアタッチしたScript
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System; 5 6public class ATKenemyHP : MonoBehaviour 7{ 8 public GameObject effectPrefab; 9 Explode explode; 10 GameObject a; 11 int b = 10; //HPを受け取る 12 13 void Start() 14 { 15 a = GameObject.FindGameObjectWithTag("PlayATK"); 16 explode = a.GetComponent<Explode>(); 17 } 18 void OnCollisionEnter(Collision other) 19 { 20 b = explode.GetComponent<Explode>().enemyHP; //ここでエラー 21 22 if ((other.gameObject.tag == "ENEMY") && b == 0) //ENEMYタグかつ受け取ったHPが0のとき 23 { 24 Destroy(other.gameObject); //全てのオブジェクトをDestroy 25 Instantiate(effectPrefab, transform.position, Quaternion.identity); 26 } 27 } 28} 29
試したこと
初めは上のExplodeだけでHPを操作しようと思いましたが,debug.LogでHPが0以下になるのを確認し,ColliderごとにHPが設定されてしまっていることがわかりました.
そのため一番上のprefab,MediumMechStrikerYellowにHP判定だけを書いたスクリプトをアタッチしてみましたが、今度はLogが何も出ませんでした.
その後,ネットで調べて攻撃を行う銃弾側にDestroyするかの判定を持たせてみようと思いATKenemyHPを書きましたがここでNull Reference Exceptionになりました.
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー