前提・実現したいこと
一昨日からUnityを使い始めた初心者です。
以下の記事にあるゲームのクリア・ゲームオーバー条件を設定&敵へのダメージ
処理まで完成させたいです。
https://unity.moon-bear.com/zombie-slayer/
ソースコードで変更している部分はBoxColliderをCapsuleCollider
に変えているぐらいで根本的な部分は変更していません。
発生している問題・エラーメッセージ
敵の自動生成でエラーが発生してしまっています。
敵キャラクターへのダメージ処理はうまくいっているのですが、
生成された敵をすぐに倒すと敵が生成されなくなったり、
当たり判定がなくAnimationのIdleが機能しているという謎の敵が生成されたりします。
またその敵が生成された後は決まって生成がストップします。
逆に1体も倒さないときは問題なく動作し、上限まで敵が増えます。
しかしその後1体でも倒すと上記にある謎の敵が生成され、生成がストップしてしまいます。
エラーメッセージ MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object.
該当のソースコード
C# --EnemyController.cs-- IEnumerator Dead() { moveEnabled = false; Stop(); gameManager.Score += score; animator.SetTrigger("Dead"); capsuleCollider.enabled = false; rigidBody.isKinematic = true; yield return new WaitForSeconds(deadTime); Destroy(gameObject); } ~ ---EmptySpawner.cs--- bool SpawnEnemy() { GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy"); if(this.gameObject == null) { return false; } if (enemies.Length >= maxEnemies) { return false; } else { int choosedIndex = Random.Range(0, enemyPrefabs.Length); float diffPositionX = Random.Range(minPositionX, maxPositonX); Vector3 position = new Vector3(transform.position.x + diffPositionX, transform.position.y, transform.position.z); Instantiate(enemyPrefabs[choosedIndex], position, Quaternion.identity); return true; } }
試したこと
敵オブジェクトのDestroyがうまくいってないのかなと思い、nullで回避する方法を
試しましたが駄目でした。
敵を倒したときに敵のmoveEnabledとcapsuleColliderをfalseにし、オブジェクトをDestroyしているのですが、おそらくこのDestroyのタイミングが悪いために、新しく生成する際に、待機状態のAnimationを再生している当たり判定が無効化された敵が生まれてしまうのかなと考えました。
しかし具体的にどうソースコードを変えればいいのかがわかりません。
補足情報(FW/ツールのバージョンなど)
Unity 2021.1.20f1
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。