Проблема добавления/извлечения из ObjectPool
Создал ObjectPool на Unity для генерации мобов, но столкнулся с проблемой: весь скрипт отрабатывает штатно, кроме одной строчки, а именно добавление в пул предзагруженных объектов.
При предзагрузке пула, скрипт не может обработать добавление объекта в пул и выдает ошибку (создает объект на сцене, но не может добавить его в пул и скрыть), поэтому на сцене появляется один экземпляр и в консоль падает ошибка:
NRE (я знаю что это, но ссылка на экземпляр ведь указана в скобках?)
Строка 43, если кто-то будет копировать код:
_pool.Enqueue(item);
using System;
using System.Collections.Generic;
using UnityEngine;
namespace ObjectsPool
{
public class PoolBase<T>
{
private readonly Func<T> _preloadFunc;
private readonly Action<T> _getAction;
private readonly Action<T> _returnAction;
private Queue<T> _pool;
private List<T> _active = new();
public PoolBase(Func<T> preloadFunc, Action<T> returnAction, Action<T> getAction, int preloadCount)
{
_preloadFunc = preloadFunc;
_getAction = getAction;
_returnAction = returnAction;
if (preloadFunc == null)
{
Debug.LogError(message: "Preload function is null");
return;
}
for (int i = 0; i < preloadCount; i++)
Return(item: preloadFunc());
}
public T Get()
{
T item = _pool.Count > 0 ? _pool.Dequeue() : _preloadFunc();
_getAction(item);
_active.Add(item);
return item;
}
public void Return(T item)
{
_pool.Enqueue(item);
_returnAction(item);
_active.Remove(item);
}
public void ReturnAll()
{
foreach (T item in _active.ToArray())
{ Return(item); }
}
}
}