ObjectPoll是什么? \ Unity3D内置ObjectPool

本文介绍了Unity3D的内置Object Pool系统,包括Object Pool的定义、使用原因、优缺点。详细阐述了Unity3D提供的多种数据结构实现的Object Pool,如CollectionPool、DictionaryPool等,并给出了使用示例。此外,文章讨论了内置Object Pool的性能提升和资源管理优势,以及如何通过API进行对象管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Unity3D在2021.1版本新增了内置的对象池系统

这是一项对大多数开发者来说非常好用且常用的功能

目录

一、Object Pool的定义

二、在游戏编程中我们为什么要使用Object Pool?

优点:

1、提高性能

 2、减少内存碎片

3、控制对象创建的时间和成本

4、简化对象管理

缺点:

1、会持久化占用内存

2、对象状态的初始化管理

三、Unity3D额外内置不同数据结构实现的Object Pool(大概描述)

1.CollectionPool,t1>

2.DictionaryPool,t1>

3.GenericPool

4.HashSetPool

5.LinkedPool

6.ListPool

7.ObjectPool

8.UnsafeGenericPool

四、实现Object Pool的小案例(案例以及源码会放到最后供大家参考)

1、是内存消耗差距比较的案例——桌球满天飞

2、是差距更加直观的案例——Biu,Biu,Biu

五、如何使用Unity3D内置ObjectPool?

       1、使用前请先导入命名空间 —— using UnityEngine.Pool;

2、详解 ObjectPool API

变量:

CountActive

CountAll

CountInactive

函数:

Clear() / Dispose()

Get()

Release()

六、Unity3D内置Object Pool的小优势

1、节省大量的学习时间,大幅提升开发效率。不需要去网络中筛选解决方案或是搜寻教程案例,又或是去掏腰包购买插件,然后再学习插件怎么用。

2、内置对象池类型较多,可以用不同数据结构去构建对象池。

3、可以通过自己的理解进行池优化,通过一定的额外扩展以及维护达到自己想要的效果。

感谢大家的观看,您的点赞和关注是我最大的动力


一、Object Pool的定义

1、将Object Pool在想象中抽象的比喻为 —— 容器:银河系     单个对象:星球

2、将Object Pool在生活中形象的比喻为 —— 容器:台球桌     单个对象:带有数字的球

3、定义:

        我觉得通俗易懂的来说就是将已经实例化的大量对象重复循环利用,而不是在每次需要用时都去重复的创建和销毁它们(频繁的反复操作会导致大量的GC垃圾回收),通过预先创建和管理对象的集合,实现对象的重复利用,从而提高游戏性能和资源利用效率。这个对象可以是任何内容,它可以是 GameObject,也可以是 Component。(自我理解总结)

                系统官方的来说对象池是一种优化项目并减轻 CPU 在必须快速创建和销毁新对象时负担的方法。这是一种很好的做法和设计模式,以帮助减轻 CPU 的处理能力,以处理更重要的任务,而不会被重复的创建和销毁调用所淹没。 对象池使用堆栈来保存对象实例的集合以供重用,并且不是线程安全的。(官方话术)


二、在游戏编程中我们为什么要使用Object Pool

优点:

1、提高性能

        对象池避免了频繁地创建和销毁对象的开销,减少了内存分配和垃圾回收的压力,从而提高了游戏的性能。

 2、减少内存碎片

        由于对象在重复使用过程中不断被创建和销毁,可能会导致内存碎片问题。对象池可以通过预先创建一定数量的对象来避免这个问题,减少内存碎片的产生。

3控制对象创建的时间和成本

        对象池在游戏开始之前就可以预先创建好一定数量的对象,避免了在游戏运行时动态创建对象的开销。这样可以提前分配对象所需的资源,并且可以更好地控制对象创建的时间和成本。

4、简化对象管理

        使用对象池可以统一管理对象的生命周期和状态,简化了对象的创建、初始化、销毁等操作,提高了代码的可维护性和可读性。

凡事都有两面性,ObjectPool也是一把双刃剑

缺点:

1、会持久化占用内存

        对象池需要预先创建一定数量的对象,占用了一定的内存空间。如果对象池设置得过大,可能会浪费内存;设置得过小,则可能频繁地创建和销毁对象。

2对象状态的初始化管理

        由于对象在重复使用过程中可能会保存其被收回池中之前的状态,需要在对象重新获取和归还时正确地管理和重置对象的初始化状态,否则可能出现意料之外的行为。


三、Unity3D额外内置不同数据结构实现的Object Pool(大概描述)

1.CollectionPool<T0,T1>

集合池,可以放

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值