当前位置:网站首页>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对象:
删除部分对象:
再次创建对象(实际上从对象池中取出):
边栏推荐
- ADC0808/9 signal acquisition developed by single chip microcomputer
- 概率论的学习整理2:如何对随机实验的对象:“事件” 进行计数呢? 四种计数方法,不只是排列组合
- 横向对比5种常用的注册中心,无论是用于面试还是技术选型,都非常有帮助
- 限时招募!淘宝无货源副业,800/天,不限经验,男女皆可,仅限前200名!
- UE5 GAS 学习笔记 后记0
- C#调用explorer.exe打开指定目录
- Program environment and preprocessing (detailed)
- 程序环境和预处理(详解)
- 域名怎么注册备案解析?
- TensorFlow custom training function
猜你喜欢
随机推荐
时间序列曲线相似性
Vim plugin GrepIt
数字量输入输出模块DAM-5088
电流继电器JL-8GB/11/AC220V
Difference between C# enumeration type and xaml
Horizontal comparison of 5 commonly used registration centers, whether it is used for interviews or technical selection, is very helpful
备战金九银十!2022面试必刷大厂架构面试真题汇总+阿里七面面经+架构师简历模板分享
IO/多路复用(select/poll/epoll)
Matlab基础(5)——符号运算
概率论的学习整理3: 概率的相关概念
C#调用explorer.exe打开指定目录
基于多目标两阶段随机规划方法的电热联合系统调度
"Learning Cloud Networking with Teacher Tang" - Problem Location - The host is working but the container is not working
LinkedList与链表
Voltage relay h2d SRMUVS - 100 vac - 2
External Force Estimation Based on Time Delay Estimation with Perturbed Kalman Filter
spin lock和mutex使用场景的差异
Scheduling of combined electric-heating system based on multi-objective two-stage stochastic programming method
原生js 创建表格
The use and principle of distributed current limiting reduction RRateLimiter









