我正在尝试在c#中为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;
}
}
start方法正确地使我的预制件的非活动实例。但是,当我使用此代码调用GetPooledObject时,我发现错误:
GameObject optionTile = ObjecdtPooler.ShareInstance.GetPooledObject();
if (optionTile != null)
{
optionTile.SetActive(true);
}
GetPooledObject方法似乎认为列表(pooledObjects)为空。这意味着只跳过此方法中的for循环,并返回null。我使用了debug.log,列表正确填充了我的预制件实例。但是当我调用GetPooledObject方法时,该列表被认为是空的。
有什么想法吗?
由于
答案 0 :(得分:0)
我希望amountToPool
的初始值为0,或者如果它大于0,则所有对象都在使用中。
因此,当所有对象都在使用时,您应该扩展池以增加给定值。