下面是一个简单的对象池实现源码,使用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方法,可以将一个游戏对象标记为未激活状态,并将其返回到池中以供后续使用。

要使用该对象池,只需将它添加到场景中并设置预制体和池大小。然后,可以在脚本中调用GetObjectReleaseObject方法来获取和释放对象。

public class Example : MonoBehaviour
{
    public ObjectPool objectPool;

    void Start()
    {
        GameObject obj = objectPool.GetObject();
        // Do something with obj
        objectPool.ReleaseObject(obj);
    }
}

这个例子使用了上面的对象池,并在开始时获取一个对象,使用它,并在完成后将其释放回池中。

unity, C#对象池实现源码

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

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