Как удалить игровые объекты из нового списка и сбросить размер списка обратно на 0? - PullRequest
0 голосов
/ 10 июля 2019

В настоящее время я сталкиваюсь с проблемой, когда я добавляю игровой объект в новый список (), но когда я очищаю список, я не могу вернуть размер списка обратно в 0. Я получаю отсутствующий (игровой объект) и размер списка по-прежнему "1".

Я пробовал метод list.clear (), но получил размер 1 и пропал (Gameobject). Я также попытался forloop получить счетчик, а затем метод RemoveAt (i), но получил то же самое.

Я использую Инспектор Unity, чтобы визуально увидеть эту проблему.

Пример:

public GameObject Object;

public List<GameObject> ObjectList = new List<GameObject>();

public void AddObjectToList()
{
    ObjectList.Add(Object);
}

public void RemoveObjectsFromList()
{
    //Attempt 1
    ObjectList.Clear();

    //Attempt 2
    for (int i = 0; i < ObjectList.Count; ++i)
    {
        ObjectList.RemoveAt(i);
    }

}

Ожидается очистка игровых объектов из списка и возврат размера списка в 0.

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Спасибо за помощь, но я нашел ответ, который, возможно, помог бы всем, если бы я упомянул об этом раньше. Я работал с двумя отдельными сценариями. Script1 в качестве основного контроллера со всеми игровыми объектами и списками, которые Script 1 называл функциями из Script 2, которые использовали переменные из скрипта 1.

Чтобы иметь возможность использовать переменные в сценарии 1 во всех сценариях, они должны быть Статические

Выпуск

Неверно: открытый список ObjectList = новый список ();

Правильно: общедоступно Статично Список ObjectList = новый список ();

Мои извинения.

0 голосов
/ 10 июля 2019

Давайте посмотрим на ваш код удаления списка ..

   for (int i = 0; i < ObjectList.Count; ++i)
    {
        ObjectList.RemoveAt(i);
    }

So

список из 3 предметов (потому что я немного ленивый)

i = 0, удаляет в 0 .. так что теперь у вас есть 0 и 1 .. я ++

теперь вы удаляете 1 .... оставляя 0 ...

Вы должны удалить в обратном порядке.

Так что для i = count-1 до 0 .. если вам нужно сказать, чтобы удалить игровые объекты или что-то еще,

или .clear ..

Однако тот факт, что вы пытались. Ясно, может быть, "объекты" тоже нужно уничтожить?

например

   for (int i = ObjectList.Count-1; i >= 0; i--)
    {
        Destroy(ObjectList[i]);
        ObjectList.RemoveAt(i);
    }
...