写一个unity对象池
时间: 2024-03-03 15:49:46 浏览: 68
Unity对象池
4星 · 用户满意度95%
好的,以下是一个简单的 Unity 对象池示例:
```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectPool : MonoBehaviour
{
public GameObject prefab; // 要缓存的对象
public int poolSize; // 对象池大小
private List<GameObject> pool; // 对象池
private void Start()
{
// 初始化对象池
pool = new List<GameObject>();
for (int i = 0; i < poolSize; i++)
{
GameObject obj = Instantiate(prefab, transform);
obj.SetActive(false);
pool.Add(obj);
}
}
// 从对象池中获取一个对象
public GameObject GetObject()
{
foreach (GameObject obj in pool)
{
if (!obj.activeInHierarchy)
{
obj.SetActive(true);
return obj;
}
}
// 如果对象池中没有空闲对象,则创建一个新的对象
GameObject newObj = Instantiate(prefab, transform);
newObj.SetActive(true);
pool.Add(newObj);
return newObj;
}
// 回收对象到对象池中
public void RecycleObject(GameObject obj)
{
obj.SetActive(false);
}
}
```
使用方法:
1. 在场景中创建一个空 GameObject,并将该脚本添加到该 GameObject 上。
2. 将要缓存的对象的 prefab 拖到脚本上的 prefab 字段中。
3. 根据需要设置对象池的大小。
4. 在代码中调用 `GetObject()` 可以获取一个空闲的对象,使用完后调用 `RecycleObject()` 可以将对象回收到对象池中。
阅读全文