接着上面的单例模式,接下来我们要写的是 【对象池】
对象池的好处有什么?当一个物品你要多次使用的时候,对象池是你最好的伙伴,
我们只需要将重复使用的东西,放进一个对象的池子,当你需要的使用的时候重复使用就好。
举个例子,如果我的每一发子弹都需要生成一个实例对象。那么占用内存很大。
但如果我先提前制作十颗子弹,而且子弹在射出一秒内会回到对象池,那么只要我一秒少于10枪。
那么我就只需要用这十颗子弹就可以一直循环使用了。
下面是对象池模式的原理跟思维
首先我们需要
- 一个字典<复用对象名字,复用数据类型> 作为对象池的储存地方。
- 泛型,为了保持对象池的通用。
- 取出 <复用对象>的方法,这样子来方便调用 字典 中的数据
- 存取<复用对象>的方法,这样我们也可以方便把数据放回字典当中
//在这里还运用了额外的 《里氏转换原则》
//制作一个基类,然后子类当作复用数据来进行存储,很妙
//而且同时,由于这个改动,使得我们将我们的方法改到了这个数据类型里面
//我们取出 和 存入,都将放在这个 Pool 里面的数据对象 里面
public class PoolData
{
//池子容器
//抽屉中挂在的父结点
public GameObject fatherObj;
//对象的容器
public List<GameObject> poolList;//用这个list来存放对象池物体
public PoolData(GameObject obj, GameObject poolObj)//应该放到Pool下面来存放物体
{
//创建一个父对象 作为pool对象的子物体
fatherObj = new GameObject(obj.name);
fatherObj.transform.parent = poolObj.transform;//而父对象又在我们的大对象池里面
poolList = new List<GameObject>() {
obj };//在构造函数的时候,自动压入一个人对象
obj.transform.parent = fatherObj.transform;//设置这个对象为List的子类
obj.SetActive(false