编程语言
首页 > 编程语言> > C#设计模式之对象池模式Object Pool

C#设计模式之对象池模式Object Pool

作者:互联网

本文仅在阐述对象池模式的思想,而非代码层面上的保姆级解释。请配合其他大佬的代码一起食用。
PS:笔者为Unity程序员,部分方法为Unity中的方法

1.为什么要引入对象池模式?

在游戏开发中,我们经常会遇到以下场景:

1.对象的大量创建和销毁,比如子弹。
2.场景中存在大量相同物体的创建和销毁,导致性能下降。

这两个场景本质上一回事,他们面对的问题就是:如何创建销毁物体且保持性能?

———————————————————————————————————————————————————————
在Unity中,使用Destroy();或者是SetActive(false);来控制对象的销毁,但是前者是真的没了,后者就还在,但是状态激活为false。

我们以音游的砖块为例来详细讨论:

这里的音游,可以用别踩白块,节奏大师。

因此,对于砖块的创建和销毁,如果单纯的生成一个砖块,销毁一个砖块,那么势必会造成性能上的损耗。

2.对象池模式的基础模型

在这里插入图片描述

重点:对象池模式,顾名思义,就是个池子。池子里面是对象。当我们要使用对象池中获取一个对象的时候,对var的对象进行“赋值”,赋予它该需要的组件。当这个对象被销毁的时候,重新进入池子,卸载所有组件,重新变成var。

在这里插入图片描述

首先我们写两个脚本:Pool.cs Brick.cs

分别是挂载到对象池和砖块上。
Pool.cs我们着重要讲得就是获取
——————————————————————————————————————————————

如何从池中获取对象池?

这里的方法有很多,主要思想就是队列,list,数组等等

1.在生成对象后,让对象进入队列
2.调用队列的Dequeue();

如何生成对象

没啥可说的,for循环,硬生成。然后添加对象就好了

1.for循环生成,然后进入队列
2.进入队列的时候,使active为false

如何返回池子

引入队列的缘故,所以直接使用队列的方法就行了。让对象返回队列就OK

1.调用Add();
2.设置active为false

——————————————————————————————————————————————
总结:
对象池模式相对来说比较简单和常用。理解模型就好,相关代码在很多博客上都能找到。

标签:销毁,false,C#,Object,队列,池子,对象,砖块,设计模式
来源: https://blog.csdn.net/qq_40963098/article/details/112978891