このエラーの意味はわかるのですが治し方がわかりません治し方を教えてください。
エラー内容
MissingReferenceException:タイプ 'EnamyManager'のオブジェクトは破棄されましたが、まだアクセスしようとしています。
スクリプトは、それがnullかどうかをチェックするか、オブジェクトを破棄しないようにする必要があります。
EnamyManager.Damage(System.Int32ダメージ)(Assets / Scrips / Quest / EnamyManager.cs:46)
PlaterManager.Attack(EnamyManager enamy)(Assets / Scrips / Quest / PlaterManager.cs:19)
BattleManager.PlayerAttckU()(Assets / Scrips / Quest / BattleManager.cs:96)
Eanamy2.OnTap2()(Assets / Scrips / Quest / Eanamy2.cs:65)
EnamyManager
private void Awake() { sphere = GameObject.Find("Sphere "); } Action tapAction; // クリックされたときに実行したい関数(外部から設定したい ) public new string name; public int hp; public int at; public GameObject hitEffect; public int Attack(PlaterManager player) { int damage = player.Damage(at); return damage; } public int Damage(int damage) { Instantiate(hitEffect, this.transform, false); //エラーが出てる場所 transform.DOShakePosition(0.3f,0.5f , 20, 0, false, true); //エラーが出てる場所 hp -= damage; Debug.Log("EnamyのHPは" + hp); if(hp <= 0) { hp = 0; } return damage; } public void addEventListenerOnTap(Action action) { tapAction += action; } public void OnTap() { Debug.Log("クリックされた"); tapAction(); }
}
Eanamy2
//tapActionに関数を登録する関数
public void addEventListenerOnTap(Action action)
{
tapAction += action; } //クリックしたら public void OnTap2() { Debug.Log("クリックされた"); tapAction();//エラーが出てる場所 }
}
PlaterManager
public int Attack(EnamyManager enamy)
{
int damage = enamy.Damage(at); //エラーが出てる場所 return damage; } public int Attack2(Eanamy2 eanamy2) { int damage = eanamy2.Damage2(at); return damage; } // ダメージ受ける関数 public int Damage(int damage) { hp -= damage; Debug.Log("PlayerのHPは" + hp); if (hp <= 0) { hp = 0; } return damage; }
BattleManager
public void Setup(EnamyManager enamyManager)
{
//BGM
SoundManager.instace.PlayBGM("Battle");
//
enamyUI.gameObject.SetActive(true); enamy = enamyManager; //enamy ↓の関係 enamyUI.SetupUI(enamy); playerUI.SetupUI(player); //EnamyUImanagerのaddEventListenerOnTapの引数にPlayerAttckUを入れる enamy.addEventListenerOnTap(PlayerAttckU); //DOMove移動五秒かけて // enamy.transform.DOMove(new Vector3(0, 10 , 0), 5f); } //初期設定 public void Setup2(Eanamy2 eanamy2z) { //BGM SoundManager.instace.PlayBGM("Battle"); // enamyUI.gameObject.SetActive(true); eanamy2 = eanamy2z; //enamy ↓の関係 enamyUI.SetupUI(eanamy2); playerUI.SetupUI(player); //EnamyUImanagerのaddEventListenerOnTapの引数にPlayerAttckUを入れる eanamy2.addEventListenerOnTap(PlayerAttckU); //DOMove移動五秒かけて // enamy.transform.DOMove(new Vector3(0, 10 , 0), 5f); } void PlayerAttckU() { //コルーチンを停止 StopAllCoroutines(); //テキスト送り //音を鳴らすキック SoundManager.instace.PlaySE(1);
int damage = player.Attack(enamy); //エラーが出てる場所
enamyUI.UpdateUI(enamy); DialogTextManager.instance.SetScenarios(new string[] { "プレイヤーの攻撃\nモンスターに"+damage+"ダメージを与えた" }); if (enamy.hp <= 0) { StartCoroutine(EndBatle()); } else { StartCoroutine(EnemyTurn()); } } void PlayerAttckU2() { StopAllCoroutines(); SoundManager.instace.PlaySE(1); int damage = player.Attack2(eanamy2); //UI表示 enamyUI.UpdateUI2(eanamy2); DialogTextManager.instance.SetScenarios(new string[] { "プレイヤーの攻撃\nモンスターに" + damage + "ダメージを与えた" }); if (eanamy2.hp <= 0) { StartCoroutine(EndBatle()); } else { StartCoroutine(EnemyTurn2()); } }