由于 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 来存储对象,并提供了 GetObjectReturnObject 方法来获取和归还对象。当 GetObject 方法被调用时,对象池首先检查是否有可用的对象。如果没有,则创建一个新的对象并将其添加到池中。然后,它从池中取出一个对象并将其设置为 Active,并将其返回给调用者。当 ReturnObject 方法被调用时,对象被设置为 Inactive,并添加回池中。

要使用这个对象池,我们只需要将要池化的对象作为 prefab 分配给 ObjectPool 组件。然后,我们可以在代码中调用 GetObjectReturnObject 方法来获取和归还对象。

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 中实现一个简单的对象池。

unity, 对象池实现源码

原文地址: http://www.cveoy.top/t/topic/AST 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录