前言:曾经我开始接触对象池的时候,百度查了一下,很多信息,唰的整整一列,看得我一脸懵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又会激活。一直循环如此。
现在是不是觉得,对象池也就那样了,是不是很简单呢?不过对象池还有很多用处,没这么简单。但这个回收利用的方法,在游戏使用中非常频繁,所以这个可是一个必备技能。
如果喜欢或者觉得有用的话,就帮作者点个赞或者关注一下吧。