Ошибка при создании пулов объектов в Юнити!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++),на которую меня выводит ошибка
Я знаком с такой ошибкой,но обычно она решается довольно просто.Но сейчас я не могу найти никакого решения.Поэтому я решил обратиться к вам)Неужели мне придётся полностью менять структуру?
Я очень растянул этот вопрос,потому что он очень важен для меня..Я новичок в кодинге и мне нужна помощь!Буду благодарен любой критики и отзывчивости!Повторюсь,я не профи..далеко не профи..И надеюсь здесь не будет море хэйта. Спасибо)


