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

相关推荐
脑电信号要分类4 小时前
将多张图片拼接成一个pdf文件输出
pdf·c#·apache
njsgcs5 小时前
c# solidworks 折弯系数检查
开发语言·c#
格林威6 小时前
工业相机图像采集:Grab Timeout 设置建议——拒绝“假死”与“丢帧”的黄金法则
开发语言·人工智能·数码相机·计算机视觉·c#·机器视觉·工业相机
唐青枫6 小时前
C#.NET SignalR + Redis Backplane 深入解析:多节点部署与跨实例消息同步
c#·.net
努力长头发的程序猿8 小时前
在Unity2d中,根据Y轴决定渲染顺序(URP项目适用)
unity
DaLiangChen18 小时前
Unity 精准 Mesh 点击检测:穿透遮挡 + 单击双击识别
unity·游戏引擎
FL162386312919 小时前
[C#][winform]segment-anything分割万物部署onnx模型一键抠图演示
开发语言·c#
love530love21 小时前
OpenClaw 手机直连配置全流程
人工智能·windows·python·智能手机·c#·agent·openclaw
迪普阳光开朗很健康21 小时前
Unity中new() 和实例化有什么区别?
unity·游戏引擎
mxwin1 天前
Unity Shader 极坐标特效 从数学原理到实战案例
unity·游戏引擎·shader·uv