unity, 对象池实现源码
由于 Unity Object Pool 的实现方式非常简单,因此我们可以使用以下代码来实现一个基本的对象池。
using System.Collections.Generic;
using UnityEngine;
public class ObjectPool : MonoBehaviour
{
public GameObject prefab;
private Queue<GameObject> pool = new Queue<GameObject>();
public GameObject GetObject()
{
if (pool.Count == 0)
{
GameObject obj = Instantiate(prefab);
obj.SetActive(false);
pool.Enqueue(obj);
}
GameObject pooledObject = pool.Dequeue();
pooledObject.SetActive(true);
return pooledObject;
}
public void ReturnObject(GameObject obj)
{
obj.SetActive(false);
pool.Enqueue(obj);
}
}
这个简单的对象池使用一个 Queue 来存储对象,并提供了 GetObject 和 ReturnObject 方法来获取和归还对象。当 GetObject 方法被调用时,对象池首先检查是否有可用的对象。如果没有,则创建一个新的对象并将其添加到池中。然后,它从池中取出一个对象并将其设置为 Active,并将其返回给调用者。当 ReturnObject 方法被调用时,对象被设置为 Inactive,并添加回池中。
要使用这个对象池,我们只需要将要池化的对象作为 prefab 分配给 ObjectPool 组件。然后,我们可以在代码中调用 GetObject 和 ReturnObject 方法来获取和归还对象。
public class Example : MonoBehaviour
{
public ObjectPool pool;
private void Start()
{
// get an object from the pool
GameObject obj = pool.GetObject();
// do something with the object
// return the object to the pool
pool.ReturnObject(obj);
}
}
这样,我们就可以在 Unity 中实现一个简单的对象池。
原文地址: http://www.cveoy.top/t/topic/AST 著作权归作者所有。请勿转载和采集!