unity中用到大量重复的物体,例如发射的子弹,可以引入对象池来管理,优化内存。

对象池使用的基本思路是:

将用过的对象保存起来,等下一次需要这种对象的时候,再拿出来重复使用。恰当地使用对象池,可以在一定程度上减少频繁创建对象所造成的开销。

并非所有对象都适合拿来池化――因为维护对象池也要造成一定开销。对生成时开销不大的对象进行池化,反而可能会出现“维护对象池的开销”大于“生成新对象的开销”,从而使性能降低的情况。

GameObjectPool.cs如下

using UnityEngine;
using System.Collections;
using System.Collections.Generic; public class GameObjectPool : MonoBehaviour {
//单例模式
private static GameObjectPool instance; public static GameObjectPool Instance
{
get { return GameObjectPool.instance; }
set { GameObjectPool.instance = value; }
} private static Dictionary<string, ArrayList> pool = new Dictionary<string, ArrayList>{ };
// Use this for initialization
void Start ()
{
Instance = this;
}
public static Object Get(string prefabName, Vector3 position, Quaternion rotation)
{
string key = prefabName + "(Clone)";
Object o;
//池中存在,则从池中取出
if (pool.ContainsKey(key) && pool[key].Count>)
{
ArrayList list=pool[key];
o=list[] as Object;
list.Remove(o);
//重新初始化相关状态
(o as GameObject).SetActive(true);
(o as GameObject).transform.position = position;
(o as GameObject).transform.rotation = rotation;
}
//池中没有则实例化gameobejct
else
{
o = Instantiate(Resources.Load(prefabName),position,rotation);
}
return o;
} public static Object Return(GameObject o)
{
string key = o.name;
if (pool.ContainsKey(key))
{
ArrayList list=pool[key];
list.Add(o);
}
else
{
pool[key] = new ArrayList(){ o};
}
o.SetActive(false);
return o;
}
}

Unity中对象池的使用的更多相关文章

  1. Unity实现”对象池管理器“

    前言:警告!这可能是坨屎,空闲时间写成,仅作娱乐 在Unity中生成或销毁一个物体会占用较大的资源,如果是制作FPS射击游戏,子弹生成更是雪上加霜.所以我自己写了一个PoolManager,不能和网上 ...

  2. Java中对象池的本质是什么?(实战分析版)

    简介 对象池顾名思义就是存放对象的池,与我们常听到的线程池.数据库连接池.http连接池等一样,都是典型的池化设计思想. 对象池的优点就是可以集中管理池中对象,减少频繁创建和销毁长期使用的对象,从而提 ...

  3. Unity中的万能对象池

    本文为博主原创文章,欢迎转载.请保留博主链接http://blog.csdn.net/andrewfan Unity编程标准导引-3.4 Unity中的万能对象池 本节通过一个简单的射击子弹的示例来介 ...

  4. 对象池----unity中应用

    对象池应用在unity中能减少资源消耗,节省内存空间具体原理不再赘述. 以下是他的操作步骤:(注意:对象池中应用到了栈或对队列!) 1).先建立一个(怪物)物体   mMonster; 2).再建立一 ...

  5. Unity编程标准导引-3.4 Unity中的对象池

    本文为博主原创文章,欢迎转载.请保留博主链接http://blog.csdn.net/andrewfan Unity编程标准导引-3.4 Unity中的对象池 本节通过一个简单的射击子弹的示例来介绍T ...

  6. GameObjectPool——Unity中的对象池

    这里介绍一种对象池的写法.它的优点在于无论取出还是插入游戏物体都是常数量时间. using UnityEngine; using System.Collections; using System.Co ...

  7. Unity 对象池 生产 保存

    Unity对象池主要是保存那些常用的物体,避免他们在不断销毁和创造中损坏性能. 主要思路为:创造物体时,判断是否存在,如果存在则调用并使其显示.如果不存在则创造一个新的. 当销毁时,调用协程延时隐藏物 ...

  8. Unity 游戏框架搭建 (十九) 简易对象池

    在Unity中我们经常会用到对象池,使用对象池无非就是解决两个问题: 一是减少new时候寻址造成的消耗,该消耗的原因是内存碎片. 二是减少Object.Instantiate时内部进行序列化和反序列化 ...

  9. Unity 游戏框架搭建 (二十) 更安全的对象池

    上篇文章介绍了,只需通过实现IObjectFactory接口和继承Pool类,就可以很方便地实现一个SimpleObjectPool.SimpleObjectPool可以满足大部分的对象池的需求.而笔 ...

随机推荐

  1. C#Winform中treeView控件使用总结

    1.如何展开结点时改变图标(注意:不是选中时) 要在目录中使用图标首先要加入一个控件ImageList(命名为imageList1),然后可以按图片的index或名称引用图片. 然后需要在TreeVi ...

  2. WPF Image控件使用本地图片

    BitmapImage bi = new BitmapImage(); // BitmapImage.UriSource must be in a BeginInit/EndInit block. b ...

  3. phpstorm 配置自带webserver ,配置根目录

    版权声明:本文为博主原创文章,未经博主允许不得转载. from http://blog.csdn.net/pony_maggie/article/details/52367093   目录(?)[-] ...

  4. python学习-day02

    ---恢复内容开始--- 一.pycharm安装 1.1破解方式http://www.cnblogs.com/evlon/p/4934705.html 1.2.头部配置: 二.运算符 2.1.比较运算 ...

  5. Softerra LDAP Browser 使用及配置 有图有真相

    Softerra LDAP Browser 4.5 我使用Softerra LDAP Browser的目的,是为了查找公司的人员信息.网上关于Softerra LDAP Browser配置太少了,所以 ...

  6. rsync 同步文件

    rsync 同步文件 rsync -avz roo@192.168.4.12::/home/a ./a  --exclude "data" exclude 去掉/a/data 文件 ...

  7. C语言每日一题之No.3

    几天下来,感慨学习要坚持下来真的是件很难的事,本来说了每天一题,可是毕竟这是个细活,需要用心雕琢,有时候真的不能当天拿下来>_<.虽然说只是一题,却涉及到很多小细节,慢慢的琢磨直至完全摸透 ...

  8. ultraedit15.00.0.1046注册码

      ultraedit注册码,版本:15.00.0.1043·········· 用户名 MAYBELOVE 注册码 LFKKM-KIMMX-OSFEB-PMISO-ELILS-IIIHO-KKHLR ...

  9. oracle desc 表结构

    SQL> desc v$logfile; 名称 是否为空? 类型 ----------------------------------------- -------- ------------- ...

  10. 使用eclipse编译调试c++

    1. 安装JDK 到官网下载最新的jdk版本,并安装 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-18 ...