Ошибка при создании пулов объектов в Юнити!C#

Хочу попросить у вас помощи в решении моей проблемы.Давайте для начала расскажу о идее своей программы(если что,речь пойдёт про юнити и C#)....

Я собираюсь сделать ранер.Пул объектов,в данном случае,я буду использовать для хранения кусочков платформ,по которой бежит игрок.Но есть одна главная платформа,которая должна появиться только один раз в начале забега(игры),а затем больше никогда не появляться.Также в иерархии находятся: объект [POOL],который хранит все пулы на сцене,а также дочерний объект [POOL]а,это и есть наш пул,который ,в свою очередь,является родителем для наших платформ(Platform_Main(Clone) и Platform_Orange(Clone)).Всё это выглядит как то так:

введите сюда описание изображения А вот,собственно,сама структура:

У меня есть 3 скрипта:

1) Просто класс Pool,он ничего не наследует,содержит несколько полей и один список,который хранит префабы наших платформ(всего их 5):

public class Pool_2
{
    public string name;                                     // имя пула
    public bool isActive = true;                            // активен ли пул
    public GameObject poolAnchor;                           // родитель всех объектов этого пула
    public List<GameObject> pool_2 = new List<GameObject>(); //список префабов платформ
}

2) Основной скрипт(PoolManager_2),который управляет всеми пулами в сцене(пулов,пока, всего 1).Этот скрипт висит на объекте ,который никогда не удалится со сцен,через этот скрипт я закидываю в список пула префабы через инспектор,вот как выглядит инспектор этого скрипта:

введите сюда описание изображения

Этот скрипт наследует MonoBehaviour имеет несколько методов:

Метод 1:

    public Pool_2 GetPool(string poolName)                  // этот метод возвращает значение типа Pool
    {
        for (int i = 0; i < poolOfPools.Count; i++)         //данный метод ищет пул объектов, по имени...
        {
            if (poolOfPools[i].name == poolName)         //...переданному в параметре как string poolName
            {
                return poolOfPools[i];
            }
        }
        return null;
    }

Метод 2:

    public GameObject GeneratePoolAnchor(string poolName)     //этод метод создаёт родителя...
    {                                                         //..для пула,опираясь на имя пула
        if (GetPool(poolName).isActive)                       // если пул активен
        {
            if (GetPool(poolName).poolAnchor != null)         // если в поле poolAnchor есть значение
            {
                GameObject PoolAnchor = Instantiate(GetPool(poolName).poolAnchor);
                return PoolAnchor;
            }
            else print("No poolAnchor in Inspector: " + poolName);
        }
        return null;
    }

Имеет пару полей

    public List<Pool_2> poolOfPools = new List<Pool_2>();    // лист типа Pool
    GameObject poolsAnchor;                                  //дочерний обьект для обьектов пула

Метод 3:

    public List<Pool_2> poolOfPools = new List<Pool_2>();                     // лист типа Pool
    GameObject poolsAnchor;                                                  //дочерний обьект для обьектов пула

    private void Start() //просто метод Start
    {
        poolsAnchor = GameObject.Find("[POOLS]");                             //создаёт родителя для всех аулов,есои не находит его в сцене 
        if (poolsAnchor == null) poolsAnchor = new GameObject("[POOLS]");
        for (int i = 0; i < poolOfPools.Count; i++)                          //перебираем все пулы и создаём для их обьектов родителя,..
        {                                                                   //...который в свою очередь дочерний к [POOLS]
            GameObject Anchor = GeneratePoolAnchor(poolOfPools[i].name);  
            Anchor.transform.SetParent(poolsAnchor.transform);
        }
        DontDestroyOnLoad(gameObject);
    }

3) Этот скрипт(Loader_2) висит на определённом пуле и занимается включением и выключением объектов пула!Самое главное,что этот скрипт наследует класс PoolManager_2.Вначале он перебирает все объекты пула и присваивает им родителя,затем находит элемент в тэгом "MainPlatform" и включает его,а остальные оставляет диактивированными:

public class Loader_2 : PoolManager_2
{
    public Transform platformParent;               //родитель данного пула
    public string poolName = "Platforms";          // имя данного пула
    public Pool_2 platformPool;                    //ссылка на пул

    private void Start()
    {
        platformPool = GetPool(poolName);                        //берёт определённый пул по имени(смотри скрипт PoolManager_2)
        for (int i = 0; i < platformPool.pool_2.Count; i++)
        {
            GameObject platform = Instantiate(platformPool.pool_2[i]) as GameObject;
            platform.transform.SetParent(platformParent);                              // устанавливает объекту определённого родителя(смотри скрипт PoolManager_2)
            if (platform.tag == "MainPlatform")
            {
                platform.SetActive(true);
            }
            else
            {
                platform.SetActive(false);
            }
        }
    }
}

Но всё заканчивается на строчке кода: for (int i = 0; i < platformPool.pool_2.Count; i++),на которую меня выводит ошибка

Я знаком с такой ошибкой,но обычно она решается довольно просто.Но сейчас я не могу найти никакого решения.Поэтому я решил обратиться к вам)Неужели мне придётся полностью менять структуру?

введите сюда описание изображения

введите сюда описание изображения

Я очень растянул этот вопрос,потому что он очень важен для меня..Я новичок в кодинге и мне нужна помощь!Буду благодарен любой критики и отзывчивости!Повторюсь,я не профи..далеко не профи..И надеюсь здесь не будет море хэйта. Спасибо)


Ответы (0 шт):