美文网首页
unity中的内存管理之对象池的使用

unity中的内存管理之对象池的使用

作者: 半闲书屋半闲人 | 来源:发表于2016-07-25 20:28 被阅读237次

一、对象池的概念

对象池背后的理念其实是非常简单的。我们将对象存储在一个池子中,当需要时在再次使用,而不是每次都实例化一个新的对象。池的最重要的特性,也就是对象池设计模式的本质是允许我们获取一个“新的”对象而不管它真的是一个新的对象还是循环使用的对象。这样做的好处是优化了在增删对象时CPU的性能损耗,但是增加了内存对游戏对象的小部分存储性能。

二、对象池的使用实例

1、打方块游戏的运行效果介绍

打方块游戏的对象池使用,通过创建一个对象池来储存子弹,减少CPU对子弹预设体的增删。

下面贴出游戏的运行界面:

子弹预设体的数量显示:

子弹的预设体的数量如图所示,根据子弹产生的速度,只要子弹的对象池中有子弹游戏对象存在,已经创建的子弹都可以循环使用,当对象池中没有子弹对象时,或者子弹对象都在使用中,则再创建一个新的子弹对象。


2、编写子弹游戏对象池

分析子弹为游戏对象,为了方便存储其他的游戏对象(如砖块等),根据不同名字的游戏对象,我们将该集合对象池储存为字典型。相同名字的游戏对象储存在动态数组中,则Dictionar<string, ArrayList>,并将该对象池脚本设置为单例脚本。

贴出代码部分:

3、游戏场景的搭建

        层次视图中创建一个空物体命名为GameController,再创建一个平面Plane,置为GameController的子物体。

工程视图中创建如下图所示,material中是砖块的材质球,Texture中是砖块的贴图

贴图如下:

材质球设置如下,将tiling设置为0.5:

砖块预设体设置如下:

子弹预设体设置如下:

Resources中有三个脚本,如下:

Bullet脚本添加在子弹预设体上,GameController脚本添加在GameController上,ObjectPool为单例脚本不添加在任何游戏物体上。

Bullet脚本内容如下:

GameController脚本如下:

三、介绍一个对象池插件

          上文讲解了ObjectPool的基本原理及其实现。下面推荐一个更加成熟的插件——PoolManager该插件功能十分强大,所以才敢卖那么贵,30美刀...国内有位牛人已经写了一份不错的教程,有兴趣的童鞋可以参考下:Unity3D研究院之初探PoolManager插件

相关文章

  • 内存优化记录1

    1:概念熟知与工具使用 profiler的使用,数据类型的区别,对象池的艺术.unity管理内存,A)unity引...

  • unity中的内存管理之对象池的使用

    一、对象池的概念 对象池背后的理念其实是非常简单的。我们将对象存储在一个池子中,当需要时在再次使用,而不是每次都实...

  • unity技术分享:对象池

    对象池是一种Unity经常用到的内存管理服务,它的作用在于可以减少创建每个对象的系统开销。 在Unity游戏开发的...

  • OC:内存管理

    目录 内存管理原理 自动释放池 内存管理原则 程序运行过程中要创建大量的对象,OC中对象是存储在堆中的,系统不会自...

  • 编程概念(二):python相关

    1、内存管理 内存计数 垃圾回收 内存池小于256字节使用Pymalloc,大对象用系统malloc 2、进程间通...

  • [Unity优化] Unity内存优化

    一、内存使用 Q1:在Unity的内存管理机制中, Reserved Total 和 Used Total之间的关...

  • 对象池

    UGUI 中使用的对象池 在 C:\Files\Unity\Projects\UGUITest\PackageSo...

  • 对象池技术

    Unity 对象池技术 为什么使用对象池? 在我们开发中,往往会遇见需要不断创建和销毁同一物体的情况。(如飞机大战...

  • Unity 对象池技术

    Unity 对象池技术 为什么使用对象池? 在我们开发中,往往会遇见需要不断创建和销毁同一物体的情况。(如飞机大战...

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

    在Unity中我们经常会用到对象池,使用对象池无非就是解决两个问题: 一是减少new时候寻址造成的消耗,该消耗的原...

网友评论

      本文标题:unity中的内存管理之对象池的使用

      本文链接:https://www.haomeiwen.com/subject/neagjttx.html