unity对象池

1.背景:

现在需要做一个弹幕玩法,所以必须要使用对象池,不然一直new对象会导致gc偏高,同时渲染也会有压力。但是考虑到很多项目的对象池不够简洁,对新人不够优化,比如我见过nodePool、classPool、gameObjectPool、luaPool 等等 。我现在要做的是仅仅使用PoolManager.Get<脚本对象>("资源url") 或者 PoolManager.Get<脚本对象>(gameObject对象) == 总之你想用对象池

只需要一个PoolManager的Get方法即可,我不管你是什么对象,只要你实现了IPool接口就可以

完整代码见github: https://github.com/yangjiejie/CustomUnityObjectPool

2.设计灵感

参考了unity官方ListPool的设计哲学平常我们使用List<T> 容器大概率需要使用到对象池

List<string> list = UnityEngine.Pool.ListPool<string>.Get()

官方实现

public class ListPool<T> : CollectionPool<List<T>, T>

{

}

上述OnGet接口直接写死null以及 OnRelease 它仅仅实现了容器的clear操作,至于元素里面是个啥它需要什么操作它不管。它管容器本身的接口不管元素。

部分代码截图:

PoolManager.cs

Pool.cs

相关推荐
Scout-leaf3 天前
WPF新手村教程(三)—— 路由事件
c#·wpf
用户298698530143 天前
程序员效率工具:Spire.Doc如何助你一键搞定Word表格排版
后端·c#·.net
mudtools4 天前
搭建一套.net下能落地的飞书考勤系统
后端·c#·.net
玩泥巴的4 天前
搭建一套.net下能落地的飞书考勤系统
c#·.net·二次开发·飞书
唐宋元明清21884 天前
.NET 本地Db数据库-技术方案选型
windows·c#
lindexi5 天前
dotnet DirectX 通过可等待交换链降低输入渲染延迟
c#·directx·d2d·direct2d·vortice
qq_454245035 天前
基于组件与行为的树状节点系统
数据结构·c#
bugcome_com5 天前
C# 类的基础与进阶概念详解
c#
雪人不是菜鸡5 天前
简单工厂模式
开发语言·算法·c#
铸人5 天前
大数分解的Shor算法-C#
开发语言·算法·c#