当前位置:网站首页>unity对象池(学习)
unity对象池(学习)
2022-07-30 11:35:00 【沧行】
对象池:
假设有一个射击游戏,那么场景中必然会创建许多的子弹。如果对于子弹只进行创建子弹—销毁子弹的流程(创建子弹-->销毁),那么可能在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对象:
删除部分对象:
再次创建对象(实际上从对象池中取出):
边栏推荐
- TensorFlow自定义训练函数
- Jingdong school recruited written test questions + summary of knowledge points
- 基于声信道分析的电缆隧道人员定位技术
- decodeURIComponent()、eval()、encodeURIComponent()
- The package of idea is not hollow
- C# 枚举类型 于xaml 中区别
- 开源出来的fuse版pfs文件系统主要就是解决缓存问题吧。nfs挂载参数带sync规避缓存问题是不是
- Reverse linked list - recursive inversion method
- Typroa 替代工具marktext
- Voltage relay h2d SRMUVS - 100 vac - 2
猜你喜欢

Reverse linked list - recursive inversion method

概率论的学习整理1: 集合和事件

时间序列曲线相似性

周鸿祎:微软抄袭了360安全模式 所以成为美国最大的安全公司

嵌入式环境下并发控制与线程安全

Summary of text alignment, line height, space, etc.

电流继电器JL-8GB/11/AC220V

Reverse linked list - iterative inversion method

概率论的学习整理--番外2:和二项式,组合相关的杨辉三角

Verilog grammar basics HDL Bits training 07
随机推荐
mapbox-gl开发教程(十四):画圆技巧
久经沙场的程序员居然也被某鱼的假程序员骗了,程序员之间的信任应该是最高的,他一个人毁了这种信任感
概率论的学习整理--番外2:和二项式,组合相关的杨辉三角
win下怎么搭建php环境的方法教程
pg_rewind 修复主备环境的时间线
11 年膨胀 575 倍,微信为何从“小而美”变成了“大而肥”?
ORA-00600 [13013], [5001], [268] 问题分析及恢复
EXCEL解决问题:如何查找目标区域,是否包含指定字符串?
基于滑模控制的不确定中立型系统有限时间稳定
LeetCode_235_二叉搜索树的最近公共祖先
如何用Golang来手撸一个Blog - Milu.blog 开发总结
Verilog语法基础HDL Bits训练 08
向上管理读书笔记
Voltage relay h2d SRMUVS - 100 vac - 2
VSCode更改插件的安装位置
Typroa 替代工具marktext
TensorFlow自定义训练函数
C# 枚举类型 于xaml 中区别
获取1688app上原数据 API
不用if分支对同一个变量做判断的方法