Unity对象池管理

好的,这里给出一个比较完整的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()方法中,我们将对象隐藏,然后将其索引重新加入空闲索引队列中,以便下次可以重复利用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值