对象池是为了有效避免重复资源利用造成的内存碎片等问题,优化性能消耗
思想:对象池的思路→
一个人物或者一个对象可能不止拥有一个对象池子,所以,需要一个容器装载不同种类的对象池
- 需要一个装载不同种类的对象池的容器,在每一种池子中,需要有该种池子的名字name,该池子是需要缓存什么样的对象的池子(GameObject)、还需要知道当前最多需要缓存几个对象(GameObject)
设计好池子类后,为了方便,可以在外部设置池子的内容为 什么,所以需要一个动态增容的容器来存储配置了几个池子!(简单方便,优先考虑List)
那这种时候我们肯定是希望能通过池子的名字找到对应的池子的,所以可以考虑使用字典来实现,键就是 池子名,值应该是什么呢,先想到,池子中的对象是一个个循环利用起来的,那么我们就自然而然的想到了队列,也就是说,我们字典的值就是队列!
所以我们实例化一个字典对象出来:
2.private Dictionary<string,Queue<GameObject>> _poolCenter = new Dictionary<string,Queue<GameObject>>();
好了,基本的框架已经构造好了,那么接下来就是考虑初始化的问题了,初始化应该实现什么样的内容呢? 考虑到要在外部配置对象池,所以在初始化中先加一个判断是否外面有配置对象池数据,没有的话直接return掉
3.那接下来该实现什么?嗯……--- 既然配置好了指定数量的对象池种类,我们在初始化中,根据对象池实现的目的,我们需要把每一个种类的池子中的每一个预先设置好的对象给实例化出来,然后放进各自对应的池子里,隐藏住,等到我们需要用的时候再拿出来!!然后在满足一定条件后,又给它放回池子里面,等待下一次的使用
初始化写完了,作为对象池,还需要提供一个方法给外部