框架介绍
对象池的实现是为了优化内存管理和提升性能,尤其是在创建和销毁大量对象时,通过复用已经创建的对象来减少垃圾回收的负担。
实现概述
开放公共方法
记忆已更新
这个对象池的实现是为了优化内存管理和提升性能,尤其是在创建和销毁大量对象时,通过复用已经创建的对象来减少垃圾回收的负担。下面我逐步解释这个实现并推荐一个案例来展示如何使用它。
代码概述
-
PoolData
类:- 负责管理具体对象的存储。
dataStack
保存的是未使用的对象,usedList
记录已使用的对象。 - 提供了对象的获取(
Pop
)和回收(Push
)功能,控制对象的激活状态、父子关系,并确保最大数量限制。
- 负责管理具体对象的存储。
-
PoolMgr
类:- 继承自
BaseManager<T>
,是整个对象池的管理器。 - 包含两个字典:
poolDic
:用于存储GameObject
类型的对象池(每个对象池都是一个PoolData
实例)。poolObjectDic
:用于存储非MonoBehaviour
类对象的池子。
- 提供对象的获取(
GetObj
)和放回池子的功能(PushObj
)。
- 继承自
-
PoolObj
类:- 挂载在需要进入对象池的预制体对象上,用于指定最大可同时存在的对象数量。
-
IPoolObject
接口与PoolObject<T>
类:- 提供了自定义数据结构或逻辑类的复用接口。
使用概述
提供PoolMgr的对象池管理方案,它继承于不继承Mono的单例类,实现一个管理器的功能。
提供isOpenLayout字段来控制是否开启布局功能,指是否要将对象池失活。物体是否会有层级的展示。
提供PoolObj来控制需要使用对象池功能的预设体,可以通过这个控制缓存物体的最大数量。
提供public GameObject GetObj(string name)、public T GetObj<T>、
public void PushObj(GameObject obj)、public void PushObj<T>(T obj, string nameSpace = "")、
public void ClearPool()五个公有方法来使用对象池。
案例使用
实现
制作PoolEnemy预制体