Здесь происходит несколько вещей.
- Удалите -1 в for для l oop, чтобы он повторялся до конца
- wave [i + 1] вызовет ошибку, поэтому проверьте, если (i
- Destroy (array [index]) попытается получить доступ к игровому объекту, но он уничтожен, поэтому вы должны создать временную переменную для хранения gameobject и установить null для элемента массива.
Некоторые исправления ниже - возможно, есть лучший способ, но я использую это:
Версия 1 - Использование вышеуказанных исправлений
IEnumerator ChangeWaveV2()
{
for (int i = 0; i < wave.Length; i++)
{
yield return new WaitForSeconds(.2f);
var t = wave[i];
wave[i] = null;
Destroy(t);
if(i < wave.Length - 1)
wave[i + 1].SetActive(true);
}
}
Версия 2 - вариант без необходимости обнулять элемент и создавать временную переменную. Если вы выполняете итерацию от конца к началу массива, вы можете свободно уничтожать () объекты GameObject в массиве. Может быть бесполезным, так как изменяет волновой массив.
IEnumerator ChangeWaveV3()
{
System.Array.Reverse(wave);
for (int i = wave.Length - 1; i >= 0; i--)
{
yield return new WaitForSeconds(.2f);
Destroy(wave[i]);
if(i > 0)
wave[i - 1].SetActive(true);
}
}