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

相关推荐
南無忘码至尊1 小时前
Unity学习90天-第2天-认识Unity生命周期函数并用 Update 控制物体移动,FixedUpdate 控制物理
学习·unity·游戏引擎
gihigo19982 小时前
嵌入式幼儿园刷卡系统 (C#实现)
c#
qq_454245032 小时前
通用引用管理框架
数据结构·架构·c#
aq55356002 小时前
三大编程语言深度对比:C# vs 易语言 vs 汇编
开发语言·汇编·c#
光泽雨2 小时前
c# 文件编译的过程
开发语言·c#
zxy28472253012 小时前
使用正运动的仿真软件C#
c#·仿真·运动控制·正运动·无硬件
三省持敬3 小时前
异步并发的“流量警察”:在C#中使用SemaphoreSlim进行并发控制的最佳实践
c#
唐青枫3 小时前
C#.NET IL 中间码 深入解析:从 C# 编译结果到 CLR 执行链路
c#·.net
小林up5 小时前
【Unity URP源码阅读1】ColorGradingLUT
unity·游戏引擎
xiaoshuaishuai85 小时前
C# 方言识别
开发语言·windows·c#