HTFramework框架使用手册(四)ObjectPool对象池

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq992817263/article/details/86610600

ObjectPool模块简介

ObjectPool是专用于GameObject类型的对象池,可以复用任意GameObject对象,以达到减少系统在频繁创建和删除对象时的开销。

使用ObjectPool

注册对象池

GameObject类型的对象需要提供一个模板注册到对象池,该模板可以为Scene中的对象或Project中的预制体,只能动态注册,注册到对象池之后便可以直接从对象池中提取对象。

    //Monster 对象模板
    public GameObject MonsterTem;
    
    private void Start ()
    {
        //注册 Monster 对象池
        Main.m_ObjectPool.RegisterSpawnPool("Monster", MonsterTem, 
        (monster) =>
        {
            //对象池的生成初始化,当一个怪物生成时,位置初始化为(0,0,0)
            monster.transform.localPosition = Vector3.zero;
        }, 
        (monster) =>
        {
            //对象池的回收初始化,当一个怪物回收时,位置初始化为(1000,1000,1000)
            monster.transform.localPosition = new Vector3(1000, 1000, 1000);
        });
	}

生成对象

对象池在注册时可以指定对象的生成时回调,和回收时回调,用于在对象生成、回收时做一些初始化操作。
注册对象池之后,提取一个新的对象很简单,只需要通过注册名称提取就可以了:

        //提取一个崭新的 Monster 对象
        GameObject monster = Main.m_ObjectPool.Spawn("Monster");

回收对象

当对象不再使用时,回收对象也很简单:

        //回收一个 Monster 对象
        Main.m_ObjectPool.Despawn("Monster", monster);

设置对象池上限

选中主预制体下的ObjectPool对象,在ObjectPoolManager的属性面板,Limit为限制对象池中单个队列的上限,对象池中的对象超过此数值时将不再回收对象。
在这里插入图片描述

取消注册对象池

需要注意的是,对象池以string类型的名称来区分,所以这里的名称绝对不能重复,也不能传错。
取消一个已注册的无用对象池:(注意该操作会彻底删除对象池中所有对象)

        //取消一个已注册的对象池,
        Main.m_ObjectPool.UnRegisterSpawnPool("Monster");

销毁对象池

销毁所有对象池以及其中包含的对象:

        Main.m_ObjectPool.Clear();

猜你喜欢

转载自blog.csdn.net/qq992817263/article/details/86610600