Unit3D 对象池理解与学习使用

	前言:曾经我开始接触对象池的时候,百度查了一下,很多信息,唰的整整一列,看得我一脸懵13。
	后来研究了一下,发现了一个插件,可以快速并且简便地使用对象池。
	而且还可以查看这个插件的代码用来加深理解,熟悉了之后你会发现,自己也能做一个对象池。(当然这篇文章不教怎么做对象池)

首先,我讲一下对象池的作用,已经了解过的,可以pass直接看下面的。
对象池主要作用就是回收利用:我拿个子弹来做例子吧,一个子弹就是一个对象,创建(instantiate)之后,我们要发射出去,发射出去之后,打到人或者到一定距离,就要删除(destroy)。而用instantiate在创建子弹的时候,如果创建大量的子弹,那么就产生大量的性能损耗。用destroy在删除子弹的时候,删了不是就是说没了。这只是表面上没了,它还藏在内存里,那么destroy多了,内存占用也变大了,就会影响游戏帧频率了,试想一个卡游戏,有谁会喜欢玩呢,是吧?
而对象池,就像你去投篮球,投完,捡回来,再投,再捡回来,再……………………就是这样。循环利用。

好了不说太多废话,正文开始:

   第一步,引用插件
   直接在Unity中打开Asset store商城,搜索LeanPool,下载导入。(这个我就不截图了)
   第二步,好像没了。emmmm。。那我们开始写代码吧!
using UnityEngine;
using System.Collections;
using Lean.Pool;//引用

public class Test : MonoBehaviour {

    public Transform Cube;//要生成的物体
    private void Awake()
    {
        Cube = Resources.Load<Transform>("Cube");//你也可以直接拖进来初始化
    }
    void Update () {
        if (Input.GetKeyDown(KeyCode.Q))//按下Q键
        {
            LeanPool.Spawn(Cube);//这句就是生成物品的核心代码(spawn生产)
        }
	}
}

在这里插入图片描述
按下Q之后

在这里插入图片描述
够简单吧?写了生成的,再写个删除的

有一点要注意,这个删除的代码就不要挂在别的物体上了,最好挂在Cube上,因为我们要删除Cube,而一个脚本去找一堆Cube很麻烦。所以我们新建一个脚本挂在Cube上。

上菜…啊呸,上代码

using UnityEngine;
using System.Collections;
using Lean.Pool;

public class Cube : MonoBehaviour {
    public void OnEnable()//放在OnEnable是为了与方法调用保持同步
    {
        Invoke("LeanDeSpawn",3f);//这段代码的意思是:OnEnable激活的时候,在计时3秒后,执行LeanDeSpawn()方法
    }
    public void LeanDeSpawn()
    {
        LeanPool.Despawn(this.transform);//这句就是删除(隐藏)物品的核心代码    }
}

在这里插入图片描述
这里所谓的删除,其实就是把它放到了对象池"LeanPool"中并且OnEnable=falese。当你再按生成键,它的OnEnable又会激活。一直循环如此。

现在是不是觉得,对象池也就那样了,是不是很简单呢?不过对象池还有很多用处,没这么简单。但这个回收利用的方法,在游戏使用中非常频繁,所以这个可是一个必备技能。

如果喜欢或者觉得有用的话,就帮作者点个赞或者关注一下吧。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值