unity 对象池管理的脚本
时间: 2023-09-04 16:07:21 浏览: 86
好的,这里给出一个比较完整的Unity对象池管理脚本示例:
```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectPool : MonoBehaviour
{
[SerializeField] private GameObject prefab; // 预制体
[SerializeField] private int initCount; // 初始数量
[SerializeField] private int maxCount; // 最大数量
private List<GameObject> pool; // 对象池
private Queue<int> queue; // 空闲索引队列
private void Awake()
{
pool = new List<GameObject>();
queue = new Queue<int>();
// 初始化对象池
for (int i = 0; i < initCount; i++)
{
GameObject obj = Instantiate(prefab, transform);
obj.SetActive(false);
pool.Add(obj);
queue.Enqueue(i);
}
}
// 从对象池中获取一个对象
public GameObject GetObject()
{
if (queue.Count > 0)
{
// 从空闲索引队列中取出一个索引
int index = queue.Dequeue();
// 返回对应的对象
return pool[index];
}
else if (pool.Count < maxCount)
{
// 创建新的对象
GameObject obj = Instantiate(prefab, transform);
obj.SetActive(false);
pool.Add(obj);
// 返回新创建的对象
return obj;
}
else
{
// 对象池已满,返回null
return null;
}
}
// 将对象重新加入对象池中
public void ReleaseObject(GameObject obj)
{
// 将对象隐藏
obj.SetActive(false);
// 将索引重新加入空闲索引队列中
int index = pool.IndexOf(obj);
queue.Enqueue(index);
}
}
```
这个脚本实现了一个简单的对象池,可以通过调用GetObject()方法从对象池中获取一个对象,然后通过调用ReleaseObject()方法将其重新加入对象池中。在Awake()方法中,我们初始化了对象池,将初始数量的对象创建出来,并将其索引加入空闲索引队列中。在GetObject()方法中,我们从空闲索引队列中取出一个索引,然后返回对应的对象,如果对象池已满,则创建新的对象。在ReleaseObject()方法中,我们将对象隐藏,然后将其索引重新加入空闲索引队列中,以便下次可以重复利用。
相关推荐
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)