Unity内置的对象池系统

使用的前提条件(重要!)

Unity 版本更新至 2021.1 以上版本

使用

Unity中国官方推文https://mp.weixin.qq.com/s?__biz=MzkyMTM5Mjg3NQ==&mid=2247548583&idx=1&sn=75b7cda6fecc03f6691bf48a214fb835&chksm=c1863d23f6f1b435799cabdab207db41f43f17620c085e34417d6d7f7222a114772567237494&scene=126&sessionid=1684999278#rdUnity官方教程https://learn.u3d.cn/tutorial/hi-objectpool

命名空间

using UnityEngine.Pool;

创建

private ObjectPool<GameObject> testPool;

初始化

testPool = new ObjectPool<GameObject>(
            () => {
                // 第一个 createFunc 它将会在创建新对象的时侯调用,这里实例化一个随机预制体。
                var testObject = Instantiate(prefab, transform);
                // 最后,返回创建好的对象。
                return testObject;
            },
            (go) => {
                // actionOnGet 
                // 会在通过池子获取对象的时候调用,在这里把它激活,
                go.SetActive(true);
            },
            (go) => {
                // actionOnRelease
                // 也就是对象放回池子里的时候会调用的回调,这里我们把需要放回池中的对象失活
                go.SetActive(false);
            },
            (go)=>{
                Destroy(go);
            });
        

从上至下分别是:

创建对象的方法的实现,表示这个对象池内会生成什么样的物体,生成物体时会进行什么操作 

获取对象的方法的实现,获取物体时会调用该方法 

将对象放回池子里的方法的实现将某个对象放回对象池时会同时调用该方法

销毁对象的实现会在彻底销毁对象时自动调用。

另外没写出来的参数包括 collectionCheck 主要是进行安全检查,防止将已经回收过的对象进行再一次的重复回收,可以保持默认开启。defaultCapacity 也就是池子初始的默认大小。maxSize 是池子的最大长度。

总结

通过Unity提供的对象池API,可以更加迅速的部署一个游戏中所需要的对象池,并且也具有一定的可拓展性。

猜你喜欢

转载自blog.csdn.net/weixin_46041788/article/details/130868126