Как исправить: объект типа «GameObject» был уничтожен, но вы все еще пытаетесь получить к нему доступ? -Единство - PullRequest
0 голосов
/ 20 апреля 2020

Я сделал 5-секундную шкалу времени, чтобы заменить волну. когда wave1 прошло 5 секунд, он перейдет к wave2. тогда первая волна будет уничтожена. когда я добрался до wave3, вышла ошибка. вот мой код:

IEnumerator ChangeWave()
{
    for (int i = 0; i < wave.Length - 1; i++)
    {
        yield return new WaitForSeconds(5f);
        Destroy(wave[i]);
        wave[i+1].SetActive(true);
    }
}

сказано об ошибке Объект типа 'GameObject' был уничтожен, но вы все еще пытаетесь получить к нему доступ. - Единство, извините за мой плохой английский sh.

1 Ответ

0 голосов
/ 21 апреля 2020

Здесь происходит несколько вещей.

  1. Удалите -1 в for для l oop, чтобы он повторялся до конца
  2. wave [i + 1] вызовет ошибку, поэтому проверьте, если (i
  3. 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...