用unity ObjectPool类创建对象池,开始对象池为空,当向对象池获取元素时,对象池有则返回元素,无则创建新元素放进对象池并返回,当使用结束后放回对象池并隐藏
时间: 2023-12-03 20:02:54 浏览: 98
unity中 对象池
好的,你的问题是如何使用Unity ObjectPool类创建对象池,并实现对象的获取和回收。下面是一份示例代码,供你参考:
```
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectPool : MonoBehaviour
{
public GameObject prefab; // 预制体
public int initialSize; // 初始大小
public bool canGrow; // 是否可以扩容
private List<GameObject> pool; // 对象池
void Start()
{
// 初始化对象池
pool = new List<GameObject>();
for (int i = 0; i < initialSize; i++)
{
AddObjectToPool();
}
}
// 从对象池中获取对象
public GameObject GetObjectFromPool()
{
for (int i = 0; i < pool.Count; i++)
{
if (!pool[i].activeInHierarchy)
{
return pool[i];
}
}
if (canGrow)
{
return AddObjectToPool();
}
return null;
}
// 将对象放回对象池并隐藏
public void ReturnObjectToPool(GameObject obj)
{
obj.SetActive(false);
}
// 向对象池中添加对象
private GameObject AddObjectToPool()
{
GameObject obj = Instantiate(prefab);
obj.SetActive(false);
pool.Add(obj);
return obj;
}
}
```
使用方法:
1. 将该脚本挂载到一个空物体上。
2. 在该脚本的属性面板中,设置预制体、初始大小和是否可以扩容。
3. 在其他脚本中,可以通过以下方法来获取和回收对象:
```
GameObject obj = objectPool.GetObjectFromPool();
// 使用 obj
objectPool.ReturnObjectToPool(obj);
```
希望这份示例代码对你有所帮助!
阅读全文