当前位置:网站首页>Unity对象池实现
Unity对象池实现
2022-08-10 05:37:00 【诺贝尔男神获得者】
Unity对象池实现
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/**
* 对象池
*/
public class ObjectPool
{
//单例模式
private static ObjectPool instance = null;
private ObjectPool() { }
public static ObjectPool Instance
{
get
{
if (instance == null){
instance = new ObjectPool();
}
return instance;
}
}
//数据部分
Dictionary<string, List<GameObject>> pool = new Dictionary<string, List<GameObject>>();
//API部分
/// <summary>
/// 往对象池中放入某一游戏物体
/// </summary>
/// <param name="obj">要放到对象池中对象</param>
public void Put(GameObject obj)
{
//不是第一次的情况
if (pool.ContainsKey(obj.name))
{
pool[obj.name].Add(obj);
}else{
//第一次存入该类游戏物体
//声明一个新的列表装该类游戏物体
List<GameObject> list = new List<GameObject>();
//创建键名和键值的对应关系
pool.Add(obj.name, list);
//把游戏物体放到列表中
list.Add(obj);
}
//将放入对象池的物体隐藏
obj.SetActive(false);
}
/// <summary>
/// 从对象池中获取某一名字的游戏物体
/// </summary>
/// <param name="key">要获取的游戏物体名</param>
/// <returns></returns>
public GameObject Get(string key)
{
//检测是否存在该名字的物体
if (pool.ContainsKey(key))
{
//列表中是否还有剩余元素
if (pool[key].Count <= 0)
{
return null;
}else {
//拿到具体游戏物体并返回
GameObject obj = pool[key][0];
//将游戏物体从对象池中删除
pool[key].Remove(obj);
obj.SetActive(true);
return obj;
}
}else{
return null;
}
}
/// <summary>
/// 清空对象池,在跳转场景时调用
/// </summary>
public void Clear()
{
//static修饰的对象在unity中跳转场景时不会被释放
pool.Clear();
}
}
边栏推荐
- 电池级碳酸锂除杂质钙镁离子工艺原理
- LeetCode refers to the offer 21. Adjust the order of the array so that the odd numbers are in front of the even numbers (simple)
- 深度学习TensorFlow入门环境配置
- (Flutter报错)Cannot run with sound null safety, because the following dependencies
- 解决错误 Could not find method leftShift() for arguments
- PyTorch之CV
- 机器学习——聚类——商场客户聚类
- 氨氮的有效吸附材料
- 【接口自动化】
- 51单片机智能蓝牙APP加油站火灾预警安防防控报警监控系统MQ2DHT11
猜你喜欢
随机推荐
从交换两数据值看指针的使用(c语言实现)
Pytorch配置与实战--Tips
STM32F407ZG 串口通信+固定帧头帧尾传输数据帧
STM32单片机RGB红蓝调光植物补光系统红光蓝光PWM调色调节亮度
ASP.Net利用代码点击相应按钮来关闭当前的页面(亲测有效)
系统架构和问题定位
【fiddler3】使用fiddler设置弱网模式
LeetCode 1351.统计有序矩阵中的负数(简单)
Radon 变换原理和应用
STC12C5A60S2单片机WIFI信号扫描报警监视系统信号增强信号过低报警
内核性能分析总结
LeetCode 2011. Variable Value After Action (Simple)
Unity中Xml简介以及通过脚本读取Xml文本中的内容
在Unity中利用代码动态更改场景中的天空盒
VTK 初步 (1) ----- 可视化管线
Unity中实现Animation Clip动画片段的倒播(该案例可以防止动画延迟)
Convolutional Neural Network (CNN) for mnist handwritten digit recognition
PyTorch之训练技巧
详解样条曲线(上)(包含贝塞尔曲线)
STM32F407ZG GPIO输出相关实验









