前提・実現したいこと
発生している問題・エラーメッセージ
MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it.
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class EnemySpawner : MonoBehaviour 6{ 7 8 public bool spawnEnabled = false; 9 10 [SerializeField] 11 int maxEnemies = 10; 12 [SerializeField] 13 float minPositionX = -3; 14 [SerializeField] 15 float maxPositonX = 3; 16 [SerializeField] 17 float minSpawnInterval = 1; 18 [SerializeField] 19 float maxSpawnInterval = 3; 20 [SerializeField] 21 GameObject[] enemyPrefabs; 22 23 bool spawning = false; 24 25 void Update() 26 { 27 if (spawnEnabled) 28 { 29 StartCoroutine(SpawnTimer()); 30 } 31 } 32 33 IEnumerator SpawnTimer() 34 { 35 if (!spawning) 36 { 37 if (SpawnEnemy()) 38 { 39 spawning = true; 40 41 float interval = Random.Range(minSpawnInterval, maxSpawnInterval); 42 yield return new WaitForSeconds(interval); 43 44 spawning = false; 45 } 46 else 47 { 48 yield return null; 49 } 50 } 51 52 yield return null; 53 } 54 55 bool SpawnEnemy() 56 { 57 GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy"); 58 59 if (enemies.Length >= maxEnemies) 60 { 61 return false; 62 } 63 else 64 { 65 int choosedIndex = Random.Range(0, enemyPrefabs.Length); 66 float diffPositionX = Random.Range(minPositionX, maxPositonX); 67 Vector3 position = new Vector3(transform.position.x + diffPositionX, transform.position.y, transform.position.z); 68 Instantiate(enemyPrefabs[choosedIndex], position, Quaternion.identity); 69 70 return true; 71 } 72 } 73}
試したこと
Googleなどで一応調べたりしましたが、オブジェクトが破壊されてnullになったかどうか?という処理をどこに入れればいいかわからないです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
> どこに入れればいいかわからないです。
例外が発生するところじゃいけないんですか?
回答ありがとうございます。プログラミング自体をいじるのが初めてでして、未だにプログラムを完全に理解できないでいます。もしよろしければどの辺りが例外が発生するところでどのように修正すればいいのか教えていただけないでしょうか。
> オブジェクトが破壊されてnullになったかどうか?という処理をどこに入れればいいかわからないです。
if (オブジェクト != null) { オブジェクトを使う } else { 使わない }
これでその例外は発生しなくなると思いますが、それで思った通りの動きになるかどうかまでは保証されません。
もしかしたらオブジェクトが破壊されない処理にしなければならないかもしれないし、また全然別のコードが必要になるかもしれません。
まずプログラムを理解しないと、思ったような修正は難しいと思います。
アドバイスありがとうございます。色々試行錯誤をしたところ、原因が分かり解決することが出来ました。おっしゃっていただいた通り、まずはプログラムを理解するところに注力したいと思います。丁寧な回答ありがとうございました。
回答1件
あなたの回答
tips
プレビュー