unity对象池(学习)
对象池:
假设有一个射击游戏,那么场景中必然会创建许多的子弹。如果对于子弹只进行创建子弹—销毁子弹的流程(创建子弹-->销毁)
,那么可能在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对象池(学习)相关推荐
- Unity对象池技术
Unity对象池技术 https://blog.csdn.net/LemonXQ/article/details/77148886 顾名思义,对象池是存放对象的缓冲区.用户可以从缓冲区中放入/取出对象 ...
- unity 对象池模式
1.理解 对象池用于减少内存开销,其原理就是把可能用到到的对象,先存在一个地方(池),要用的时候就调出来,不用就放回去.而不是要用的时候创建,不用的时候销毁. Eg: 我有个飞机,射击子弹,按传统的方 ...
- Unity对象池简单应用
1.简单介绍 在Unity开发过程中,对象池是一种很好的能用于减少内存开销的方式.在许多场景中,比如角色射击出去的子弹,以及在游戏运行过程中频繁生成的敌人-如果在运行时实时在场景中Instance和D ...
- Unity程序框架总结归置系列(2)——对象池
上一篇--Unity程序框架总结归置系列(1)--单例基类 该说的,上一篇也说了.话不多说,直接开肝. unity对象池模块 先直接上源码: using System.Collections.Gene ...
- Unity学习之对象池
Unity学习之对象池 文章目录 Unity学习之对象池 前言 一.对象池是什么? 二.对象池使用步骤 总结 前言 在游戏中,生成大量对象(如子弹)是非常耗性能的,就更不用提事后销毁这些对象. 对象池 ...
- 【游戏开发实战】Unity循环复用列表,支持不规则尺寸(对象池 | UGUI | ScrollRect | Demo源码)
文章目录 一.前言 二.使用方法 1.创建Scroll View 2.设置Scroll View参数 2.1.调整宽高 2.2.删除Scrollbar滑块 2.3.设置item模板: Item Tem ...
- Unity中的资源管理-对象池技术(3)
本文分享Unity中的资源管理-对象池技术(3) 在上两篇文章中, 我们一起学习了普通类的两种对象池实现, 今天接着介绍Unity中GameObject(主要是预制实例化对象)的对象池. GameOb ...
- 对象池——Smiple Pool For Unity
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/54096845 作者:car ...
- Unity中对象池的使用
unity中用到大量重复的物体,例如发射的子弹,可以引入对象池来管理,优化内存. 对象池使用的基本思路是: 将用过的对象保存起来,等下一次需要这种对象的时候,再拿出来重复使用.恰当地使用对象池,可以在 ...
最新文章
- 文凭-决定的人生成败?上
- Qomolangma实现篇(七):Qomo的接口机制
- row_number() over()函数基本用法
- QT中Widget去除系统提供工具以及系统默认边框
- 掌握 Ajax,第 8 部分: 在请求和响应中使用 XML
- 给 ABAP ALV 报表的数据行增添颜色效果试读版
- zabbix自动发现(Discovery)功能使用
- 3.7-php连接MongoDB
- Python脚本覆盖率分析方法介绍
- linux上chrome、vlc等程序root不能运行的解决办法
- 华为透露成长秘诀:信息化建设铸就发展奇迹
- 「实验一小时」——大牛直播讲解PHP楼赛题目,就在今晚!
- 车牌识别算法 基于yolov5的车牌检测+crnn中文车牌识别 支持12种中文车牌识别
- 新阁上位机开发---数据库系统之sa账户登录失败
- System memory,AGP memory和video memory【转】
- Qt sender()用法详解
- kali配置静态IP地址
- 深度学习(一):给你的数据集打标签
- 嵌入式软件学习问题汇总(一)什么是嵌入式?
- c语言实现alsa播放