对象池:
  假设有一个射击游戏,那么场景中必然会创建许多的子弹。如果对于子弹只进行创建子弹—销毁子弹的流程(创建子弹-->销毁),那么可能在1S间创建很多很多的子弹,也会销毁很多子弹,对于游戏性能来说是一个很大的阻碍,会严重的拖垮性能。解决方法就是用到对象池。
   对象池管理了一个集合,以后每次创建子弹都是从对象池中取出,如果对象池中没有再创建子弹,而销毁子弹就是加入集合(取出子弹(创建子弹)-->加入集合)。实际上就是通过一个集合管理创建的对象,销毁子弹就是加入集合,创建子弹时先去对象池查看,有的话就取出,没有就创建。

一个简单的对象池管理器

//对象池管理器
public class PoolTest : MonoBehaviour
{//对象池集合public List<GameObject> list = new List<GameObject>();//游戏预制体public GameObject GoPrefabs;//对象池能保存的最大个数public int MaxCount = 100;//对象保存到对象池public void push(GameObject go){if (list.Count < MaxCount){list.Add(go);}else{Destroy(go);}}//从对象池取出一个对象public GameObject Pop(){if (list.Count > 0){GameObject go = list[0];list.RemoveAt(0);return go;}return Instantiate(GoPrefabs);}//清空对象池public void Clear(){list.Clear();}
}
public class Test : MonoBehaviour
{//创建一个集合保存场景中存在的对象(不在对象池的对象)private List<GameObject> list = new List<GameObject>();void Update(){//点击鼠标左键创建一个对象if(Input.GetMouseButtonDown(0)){//从对象池中取出一个对象GameObject go = GetComponent<PoolTest>().Pop();list.Add(go);go.SetActive(true);}//点击鼠标右键删除一个对象if (Input.GetMouseButtonDown(1)){//放入对象池//判断保存场景中对象的list是否为空if (list.Count > 0){GetComponent<PoolTest>().push(list[0]);list[0].SetActive(false);list.RemoveAt(0);}}}
}

在unity创建一个Cube并设为预制体,再创建一个空对象,并将PoolTest和Test挂载到上面。

首次创建Cube对象:

删除部分对象:

再次创建对象(实际上从对象池中取出):

unity对象池(学习)相关推荐

  1. Unity对象池技术

    Unity对象池技术 https://blog.csdn.net/LemonXQ/article/details/77148886 顾名思义,对象池是存放对象的缓冲区.用户可以从缓冲区中放入/取出对象 ...

  2. unity 对象池模式

    1.理解 对象池用于减少内存开销,其原理就是把可能用到到的对象,先存在一个地方(池),要用的时候就调出来,不用就放回去.而不是要用的时候创建,不用的时候销毁. Eg: 我有个飞机,射击子弹,按传统的方 ...

  3. Unity对象池简单应用

    1.简单介绍 在Unity开发过程中,对象池是一种很好的能用于减少内存开销的方式.在许多场景中,比如角色射击出去的子弹,以及在游戏运行过程中频繁生成的敌人-如果在运行时实时在场景中Instance和D ...

  4. Unity程序框架总结归置系列(2)——对象池

    上一篇--Unity程序框架总结归置系列(1)--单例基类 该说的,上一篇也说了.话不多说,直接开肝. unity对象池模块 先直接上源码: using System.Collections.Gene ...

  5. Unity学习之对象池

    Unity学习之对象池 文章目录 Unity学习之对象池 前言 一.对象池是什么? 二.对象池使用步骤 总结 前言 在游戏中,生成大量对象(如子弹)是非常耗性能的,就更不用提事后销毁这些对象. 对象池 ...

  6. 【游戏开发实战】Unity循环复用列表,支持不规则尺寸(对象池 | UGUI | ScrollRect | Demo源码)

    文章目录 一.前言 二.使用方法 1.创建Scroll View 2.设置Scroll View参数 2.1.调整宽高 2.2.删除Scrollbar滑块 2.3.设置item模板: Item Tem ...

  7. Unity中的资源管理-对象池技术(3)

    本文分享Unity中的资源管理-对象池技术(3) 在上两篇文章中, 我们一起学习了普通类的两种对象池实现, 今天接着介绍Unity中GameObject(主要是预制实例化对象)的对象池. GameOb ...

  8. 对象池——Smiple Pool For Unity

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/54096845 作者:car ...

  9. Unity中对象池的使用

    unity中用到大量重复的物体,例如发射的子弹,可以引入对象池来管理,优化内存. 对象池使用的基本思路是: 将用过的对象保存起来,等下一次需要这种对象的时候,再拿出来重复使用.恰当地使用对象池,可以在 ...

最新文章

  1. 文凭-决定的人生成败?上
  2. Qomolangma实现篇(七):Qomo的接口机制
  3. row_number() over()函数基本用法
  4. QT中Widget去除系统提供工具以及系统默认边框
  5. 掌握 Ajax,第 8 部分: 在请求和响应中使用 XML
  6. 给 ABAP ALV 报表的数据行增添颜色效果试读版
  7. zabbix自动发现(Discovery)功能使用
  8. 3.7-php连接MongoDB
  9. Python脚本覆盖率分析方法介绍
  10. linux上chrome、vlc等程序root不能运行的解决办法
  11. 华为透露成长秘诀:信息化建设铸就发展奇迹
  12. 「实验一小时」——大牛直播讲解PHP楼赛题目,就在今晚!
  13. 车牌识别算法 基于yolov5的车牌检测+crnn中文车牌识别 支持12种中文车牌识别
  14. 新阁上位机开发---数据库系统之sa账户登录失败
  15. System memory,AGP memory和video memory【转】
  16. Qt sender()用法详解
  17. kali配置静态IP地址
  18. 深度学习(一):给你的数据集打标签
  19. 嵌入式软件学习问题汇总(一)什么是嵌入式?
  20. c语言实现alsa播放

热门文章

  1. IBM的T60笔记本欣赏
  2. dpkg命令常用格式
  3. ESP8266 Mesh发包流程介绍
  4. Ubuntu中安装和使用miniconda
  5. 一个柱面上为什么可以有多个磁道
  6. SQL使用Inserted和Deleted表
  7. Redis哨兵机制原理详解
  8. 企业IT工程师,如何向云计算架构师转型
  9. 基于Android家庭食谱推荐系统app
  10. 1-学习大纲+课程介绍+重点知识