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

相关推荐
萌萌的提莫队长14 分钟前
Unity HDRP 渲染管线 Camera 输出到RenderTexture没有Alpha通道
unity·游戏引擎
winlife_41 分钟前
Unity Editor 工具不该用反射写组件字段:SerializedObject 在 4 个场景里非用不可
unity·自动化·游戏引擎
星河耀银海1 小时前
Unity C#入门:变量的定义与访问权限(public/private)
unity·c#·lucene
asdzx671 小时前
使用 C# 添加或读取 Excel 公式:完整指南
开发语言·c#·excel
加号31 小时前
【C#】 中 BCD 字节数组转十进制字符串的原理与实现思路
开发语言·c#
周杰伦fans1 小时前
C# 从 List 中移除另一个集合
windows·c#
大空大地20261 小时前
C#进阶语法**总结
c#
郝学胜-神的一滴1 小时前
中级OpenGL教程 005:为球体&平面注入法线灵魂
c++·unity·图形渲染·three.js·opengl·unreal
那个村的李富贵2 小时前
unity编辑器工具,输出使用的字体
unity·编辑器·游戏引擎
ez52fF0k82 小时前
.NET11云原生CI/CD在云原生应用持续集成与交付安全加固
前端·c#·交互