unity框架之PoolManager插件使用

[Unity3D研究院之初探PoolManager插件(七十四)](http://www.xuanyusong.com/archives/2974

为什么Unity实例化很慢?
Unity3D研究院之利用缓存池解决Instantiate慢的问题(七十三)
如:
1、复杂的界面
NGUI研究院之为什么打开界面太慢(十三)http://www.xuanyusong.com/archives/2799
对!导致于你界面打开慢的原因就是prefab上绑的脚本,罪魁祸首就是脚本。
一定要把一个界面的所有GameObject做成一个Prefab
2.角色放技能的时候卡
3.载入模型的时候卡
怎么解决?
如果要想游戏运行时不卡,我们必须要进行预加载(Resources.Load

分享了一个缓存池的工具
PoolManager5 介绍: https://www.assetstore.unity3d.com/en/#!/content/1010
缓存池我们主要关注的几个事情
1.怎么把游戏对象保存进缓存池
2.怎么把游戏对象从缓存池里面去出来
3.如何智能删除缓存池。
很期待,因为PoolManager都满足了这几个需求。如下图所示,创建一个空的GameObjcet 接着把Spawn Pool脚本绑上去。
PoolName:缓存池的唯一名称。

MatchPoolScale:勾选后实例化的游戏对象的缩放比例将全是1,不勾选择用Prefab默认的。

MachPool Layer:勾选后实例化的游戏对象的Layer将用Prefab默认的。

Don’t Reparent:勾选后实例化的对象将没有父节点,通通在最上层,建议不要勾选。

Don’t Destroy On Load:这个就不用我解释了吧?切换场景不施放。

Pre-Prefab Pool Options :缓存池列表,意思就是缓存列表里面可以放各种类型的Prefab。右边有个 “+”按钮点击就添加每个类型的Prefab了,后面会介绍脚本怎么动态添加。

prefab:可以直接把工程里的Prefab直接拖进来。

preloadAmount:缓存池这个Prefab的最大保存数量。

preloadTime:如果都选表示缓存池所有的gameobject可以“异步”加载。

preloadFrames:每几帧加载一个。

preloadDelay:延迟多就开始加载。

limitInstance:是否开始实例的限制功能。

limit Amount:限制缓存池里最大的Prefab的数量,它和上面的preloadAmount是有冲突的,如果同时开启则以limitAmout为准。

limitFIFO:如果我们限制了缓存池里面只能有10个Prefab,如果不勾选它,那么你拿第11个的时候就会返回null。如果勾选它在取第11个的时候他会返回给你前10个里最不常用的那个。

cullDespawend:是否开启缓存池智能自动清理模式。

cull Above:缓存池自动清理,但是始终保留几个对象不清理。

cull Delay:每过多久执行一遍自动清理,单位是秒。

cullMaxPerPass:每次自动清理几个游戏对象。

补充一下,这里我们说的自动清理,就是当池子里面的对象setActive(false)也就是目前不用的时候,poolManager会根据上述参数自动清理这些对象,清理也就是Destroy()掉。

Foxmail20140718_1.png

上面我详细的把PoolManager核心的参数统统介绍了一遍。上面的做法我们是在游戏运行前提前去初始化已知的游戏对象,可是实际游戏中往往我们需要动态的去载入一些无法提前预知的游戏对象,所以初始化内存池的操作我建议还是在脚本里面来完成。

如下图所示,我们在Hierarchy视图里面就创建一个PoolManager对象,上面挂上SpawnPool脚本,标记它为Don’tDestroyOnLoad状态。


Foxmail20140718_2.png

下面我们看看怎么通过脚本来动态的给内存池里面加东西
using UnityEngine;
using System.Collections;
using PathologicalGames;

public class NewBehaviourScript : MonoBehaviour {

SpawnPool spawnPool;
PrefabPool refabPool;
void Start()
{
spawnPool = PoolManager.Pools["Shapes"];
refabPool = new PrefabPool(Resources.Load<Transform>("momo"));
}

void OnGUI()
{
if(GUILayout.Button("初始化内存池"))
{
if(!spawnPool._perPrefabPoolOptions.Contains(refabPool))
{
refabPool = new PrefabPool(Resources.Load<Transform>("momo"));
//默认初始化两个Prefab
refabPool.preloadAmount = 2;
//开启限制
refabPool.limitInstances = true;
//关闭无限取Prefab
refabPool.limitFIFO = false;
//限制池子里最大的Prefab数量
refabPool.limitAmount =5;
//开启自动清理池子
refabPool.cullDespawned = true;
//最终保留
refabPool.cullAbove = 10;
//多久清理一次
refabPool.cullDelay = 5;
//每次清理几个
refabPool.cullMaxPerPass =5;
//初始化内存池
spawnPool._perPrefabPoolOptions.Add(refabPool);
spawnPool.CreatePrefabPool(spawnPool._perPrefabPoolOptions[spawnPool.Count]);
}
}

if(GUILayout.Button("从内存池里面取对象"))
{
///从内存池里面取一个GameObjcet
Transform momo = spawnPool.Spawn("momo");
}

if(GUILayout.Button("清空内存池"))
{
//清空池子
spawnPool.DespawnAll();
}
}
}

spawnPool.Despawn() 可以单独从池子里面清空某一个Prefab。
spawnPool.Insert() 还可以插入在池子里面某个序列上。


Foxmail20140718_3.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容