unity, C#对象池实现源码
下面是一个简单的对象池实现源码,使用C#语言和Unity引擎。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectPool : MonoBehaviour
{
public GameObject prefab;
public int poolSize = 10;
private List<GameObject> pool;
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 ReleaseObject(GameObject obj)
{
obj.SetActive(false);
}
}
这个对象池实现可以接收一个预制体和一个池大小作为参数。在开始时,它会创建指定数量的游戏对象,并将它们添加到对象池中。通过调用GetObject方法可以获取一个未激活的对象,如果池中没有可用对象,它将创建一个新的对象并将其添加到池中。通过调用ReleaseObject方法,可以将一个游戏对象标记为未激活状态,并将其返回到池中以供后续使用。
要使用该对象池,只需将它添加到场景中并设置预制体和池大小。然后,可以在脚本中调用GetObject和ReleaseObject方法来获取和释放对象。
public class Example : MonoBehaviour
{
public ObjectPool objectPool;
void Start()
{
GameObject obj = objectPool.GetObject();
// Do something with obj
objectPool.ReleaseObject(obj);
}
}
这个例子使用了上面的对象池,并在开始时获取一个对象,使用它,并在完成后将其释放回池中。
原文地址: https://www.cveoy.top/t/topic/ASU 著作权归作者所有。请勿转载和采集!