请你实现一个简单的Unity 对象池
时间: 2024-05-08 15:19:12 浏览: 106
好的,我可以为您实现一个简单的Unity对象池,这是一个通用的代码示例:
```csharp
using System.Collections.Generic;
using UnityEngine;
public class ObjectPool : MonoBehaviour
{
[SerializeField] private GameObject prefab;
[SerializeField] private int poolSize = 10;
private Queue<GameObject> pool = new Queue<GameObject>();
private void Start()
{
for (int i = 0; i < poolSize; i++)
{
GameObject obj = Instantiate(prefab);
obj.SetActive(false);
pool.Enqueue(obj);
}
}
public GameObject GetObject()
{
if (pool.Count > 0)
{
GameObject obj = pool.Dequeue();
obj.SetActive(true);
return obj;
}
else
{
GameObject obj = Instantiate(prefab);
obj.SetActive(true);
return obj;
}
}
public void ReturnObject(GameObject obj)
{
obj.SetActive(false);
pool.Enqueue(obj);
}
}
```
该代码使用队列来存储对象池中的预制件对象,当需要获取一个对象时,它会从队列中取出一个对象并将其激活,如果队列为空,则会新实例化一个对象。当需要回收一个对象时,它会将对象禁用并将其加入队列中。你可以将这个代码放在任何需要重复使用游戏对象的场景中。
阅读全文