【Unity】如何使用Unity内置对象池

在Unity所提供的API中,为开发者提供了一些基本的内置对象池类,可以自动化地实例化重复对象和回收对象,而开发者只需要简单搭建一些框架,就可以轻松使用它。

下面我将介绍一种我常用的Unity内置对象池。

一、引入Unity对象池命名空间

using UnityEngine.Pool;

二、定义对象池对象和预制体对象

//创建一个对象池对象
private ObjectPool<GameObject> pool;

/*
    预制体对象

    也就是你要重复生成的对象
*/
public GameObject prefab;

三、构造对象并填入方法

在构造对象的时候,我们需要传入七个参数,其中前四个要填写方法,后三个为值参数。我们不用管它的内部是怎么运行的,Unity官方所提供的技术会为我们打理好对象池的运行,我们只需要会使用它就行了。

/*后三个函数解释:启用安全检查为true,默认池容量10,最大池容量1000*/
pool = new ObjectPool<GameObject>(createFunc,actionOnGet,actionOnRelease,actionOnDestroy,true,10,1000);


//以下四个函数照着写就行

/*createFunc:用于在池为空的时候创建新实例*/
GameObject createFunc()
{
    var obj = Instantiate(prefab,transform);
    return obj;
}

/*actionOnGet:从池中获取实例时调用*/
void actionOnGet(GameObject obj)
{
    obj.gameObject.SetActive(true);
}

/*
actionOnRelease:在实例返回到池时调用,可以用于清理或者禁用实例*/
void actionOnRelease(GameObject obj)
{
    obj.gameObject.SetActive(false);
}

/*actionOnDestroy:操作销毁。当元素由于池达到最大大小而无法返回到池时调用*/
void actionOnDestroy(GameObject obj)
{
    Destroy(obj);
}

四、取出对象和释放对象

当我们使用了对象池技术之后,就要使用ObjectPool自带的方法来取出对象和释放对象

/*
    主要用到两个方法,一个是Get(),另一个是Release()
    基于这两个方法,自由发挥即可
*/

//生成对象
private void GenerateObj()
{
    /*
        游戏对象的获取。Get方法为ObjectPool类的内置方法,
        类似于Instantiate()
    */
    GameObject obj = pool.Get();
    //...
}

/*
    销毁对象

    实际上并没有被销毁,只不过是被禁用了而已(就是SetActive(false))
*/
private void DestroyObj(GameObject obj)
{
    pool.Release(obj)
}

这里只是一个代码层面的使用讲解,需要结合你的项目的实际情况进行调整优化,切勿生搬硬套,请自由发挥!

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君莫愁。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值