Я пытаюсь создать простой пул объектов в С# для Unity. До сих пор я использовал этот класс:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class ObjectPool : MonoBehaviour
{
public static ObjectPool ShareInstance;
public List<GameObject> pooledObjects;
public GameObject objectToPool;
public int amountToPool;
// Use this for initialization
void Start()
{
pooledObjects = new List<GameObject>();
for (int i = 0; i < amountToPool; i++)
{
GameObject obj = (GameObject)Instantiate(objectToPool);
obj.SetActive(false);
pooledObjects.Add(obj);
}
}
void Awake()
{
ShareInstance = this;
}
public GameObject GetPooledObject()
{
for (int i = 0; i < pooledObjects.Count; i++)
{
if (!pooledObjects[i].activeInHierarchy)
{
return pooledObjects[i];
}
}
return null;
}
}
Метод запуска правильно делает неактивные экземпляры моего префаба. Однако я обнаружил ошибку, когда использую этот код для вызова GetPooledObject:
GameObject optionTile = ObjecdtPooler.ShareInstance.GetPooledObject();
if (optionTile != null)
{
optionTile.SetActive(true);
}
Метод GetPooledObject считает, что список (pooledObjects) пуст. Это означает, что цикл for в этом методе просто пропускается и возвращается null. Я использовал debug.log, и список правильно заполнен экземплярами моего префаба. Однако, когда я вызываю метод GetPooledObject, список считается пустым.
Любые идеи?
Спасибо