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

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值