[开发者心得] 对象池 GameObjPool 一句话讲清楚+作用+常用方法

[复制链接]
1439 |0
本帖最后由 龍且 于 2023-11-13 09:56 编辑

一句话讲清楚:对mw.GameObject对象池的封装,单例类,使用时直接GameObjPool.对应接口即可
作用:方便我们对需要反复创建并销毁的GameObject对象管理与维护,在创建时先去对象池查找有没有这个对象,销毁时以隐藏或者移动位置的方式代替真正的destroy,来避免在内存中频繁地create和destory带来的性能开销!
原理:在spawn时根据guid和type去看对应的数组有没有对象,如果有就pop出来并将其显示,如果没有则使用spawn或asyncSpawn创建出来,在despawn时再将其push到guid和type对应的数组中,并设置它的位置以及从父对象脱离和隐藏
常用方法:
1.创建
spawn<T extends mw.GameObject>(guid: string, type?: GameObjPoolSourceType): T;

资源guid如果是资源库中的资源需要预加载,资源类型type默认是资源库中的资源,如果是预置体就传入GameObjPoolSourceType.Prefab。
使用示例:
// "Npc"是资源库中的资源,因为第二个参数默认值是GameObjPoolSourceType.Assets实际也可以不用传
GameObjPool.spawn("Npc", GameObjPoolSourceType.Asset)

2.异步的创建
asyncSpawn<T extends mw.GameObject>(guid: string, type?: GameObjPoolSourceType): Promise<T>;

3.回收
despawn(obj: mw.GameObejct): void;

使用示例:
// 回收这个对象,源码会设置它的位置并让其从父节点脱离并设置其为隐藏
GameObjPool.despawn(obj)

回复

使用道具 举报

热门版块
快速回复 返回顶部 返回列表