Unity基础框架学习--缓存池(最最实用的框架)

什么是 缓存池?

缓存池是 我在游戏构件中 用的比较多的一个框架模型,基于以下几点原因。

1、游戏性能的考虑。
在unity里,我们有大量的 生成(Instantiate)和 销毁(Destroy)物体的操作,在我们内存中,Destroy 了一个物体后,他虽然消失了,但是内存里还有着他的引用。

这样,当这样的操作不断进行,最后内存会越来越满,直接造成游戏卡顿等现象,这是十分不可取的。

2、框架包装,简单方便的调用。
如前几个模块一样, 缓存池包装 完毕后,也就是一两行代码,就能进行一个 小功能的 实现。

3、案例。

比如说 发射子弹类的 游戏。

我们来关注子弹。
子弹的使命 是生成出来,发射到目标,然后销毁

通常一个 射击类 游戏不断的 会重复 上述操作,如过我们单纯的使用 Destroy 函数 绝对是不可取的,因为内存会被不断的占用。

通常我们会用 缓存池,来缓存我们的子弹,达到这样的效果:
1、 物体 需要销毁时 ,我们将他失活,存放起来。
2、物体 再次 需要被使用时,将他 激活,再次使用。

简而言之,缓存池起到了 废物利用 的作用,而这个 废物利用的 过程 非常快(相较于 重新 加载这个资源物体),不但提升了游戏性能, 也简便了 代码的 书写。

先行准备

1、面向对象思想。
2、运用时,以 lambda 表达式为主
3、前面的资源加载模块 (要会用就行)

缓存池的 思想

1、加载物体(对应 生成(Instantiate))

加载物体 调用 资源加载模块 的包装函数,有同步、异步加载。同时我们注意 回调函数(lambda表达式来实现) 的联系,来处理加载完毕后物体的操作。

2、缓存物体 (对应 销毁(Destroy))

缓存池不销毁(Destroy)物体,而是使物体失活,等到它再要被使用的时候,再把它激活,放到需要使用的地方。
而我们要处理的是怎么存放 失活的 物体,我们将他放到管理的 GameObject 下面,像文件夹一样存放即可,如下图所示:

在这里插入图片描述

我们新建C#脚本 ObjPool

1、PoolData 基本成员的抽象

如上图所示,成员变量要有一个 挂载的父节点:
public Class PoolData()
{
   
	public GameObject fatherObj; // 文件夹 名字
	public List<GameObject> poolList; //存放 一样的 物体
}

构造函数,根据上图示意,传递的是 该物体,以该物体的 名字做一个文件夹,文件夹 的 父对象就是我们的 池子:

public PoolData(GameObject objName,GameObject poolObj)
{
   
	fatherObj = new GameObject(ObjName.name);
	fatherObj.transform.parent = poolObj.transform;
//初始化 List
	poolList = new List<GameObject>();
	// 将 objName 这个物体 加进list
	PushObj(objName);
}

功能函数,添加 和 移除 物体 :

	public void PushObj(GameObject obj)
    {
   
        poolList.Add(obj);
        obj.transform.parent = fatherObj.transform;

        //首先失活 隐藏
        obj.SetActive(false);
    }
     public GameObject GetObj()
     {
   
        GameObject obj = poolList[0];
		// list里的物体都是一样的
        poolList.RemoveAt(0);

        obj.SetActive(true);

        obj.transform.parent = null;
        return obj;
     }

2、ObjPool 的构建

成员有个 大文件夹,借用字典存放物体:

private GameObject poolObj;
public Dictionary<string,PoolData> poolDic = 
new Dictionary<string
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值