当前位置: 首页 > news >正文

unity开发中Hash、Queue、LinkedList简单介绍

在Unity游戏开发中,除了Dictionary和List外,以下三种数据结构能高效解决特定问题场景:


1. HashSet<T>:闪电级存在性检查

核心特点:基于哈希表实现的高效集合,元素唯一无视顺序

优势:
  • O(1)极速查找 - 比List快100倍(10,000元素下List需15ms,HashSet仅0.1ms)
  • 自动去重 - 添加重复元素自动忽略
  • 集合运算 - 支持交集/并集/差集等数学操作
// 实战案例:成就系统
HashSet<string> _unlockedAchievements = new HashSet<string>();void UnlockAchievement(string id) {// 存在性检查比字典更直观(不需要Value)if (!_unlockedAchievements.Contains(id)) {_unlockedAchievements.Add(id);ShowPopup($"成就解锁: {id}");}
}// 集合运算:检测是否完成成就组
bool CheckAchievementSet(HashSet<string> requiredSet) {// 判断玩家成就集是否包含目标集合return _unlockedAchievements.IsSupersetOf(requiredSet);
}

适用场景
✅ 需要高频判断存在性(成就/收集物系统)
✅ 需维护唯一ID集合(已解锁技能池)
✅ 需要集合运算(任务条件检测)

典型应用

  • 玩家已获得道具ID集合
  • 技能冷却白名单
  • 开放世界区域解锁标记

🔄 2. Queue<T>:顺序性事件调度器

核心特点:先进先出(FIFO)的管道结构,保证事件时序

优势:
  • 时序保证 - 先加入的元素必然先被处理
  • 缓冲区机制 - 缓解帧率波动带来的事件堆积
  • 零索引开销 - 仅操作队头队尾,性能稳定
// 实战案例:AI指令系统
Queue<AICommand> _aiCommandQueue = new Queue<AICommand>();void ReceiveCommand(AICommand cmd) {_aiCommandQueue.Enqueue(cmd);  // 指令入队
}void Update() {// 每帧仅处理1条指令(避免AI行为冲突)if (_aiCommandQueue.Count > 0) {AICommand currentCmd = _aiCommandQueue.Dequeue();ExecuteCommand(currentCmd);  // 执行队首命令}
}// 示例命令结构
class AICommand {public enum Type { Move, Attack, Patrol }public Type type;public Vector3 target;
}

适用场景
✅ 需顺序处理的命令(RTS单位指令)
✅ 消息事件管道(网络消息/聊天系统)
✅ 延迟执行任务(特效播放队列)

典型应用

  • 塔防游戏敌人出生波次
  • 卡牌游戏的出牌顺序
  • 对话框逐字显示系统

3. LinkedList<T>:动态增删之王

核心特点:基于节点的链式存储,任意位置插入删除O(1)

优势:
  • 高效中间操作 - 在已知节点旁插入/删除比List快100倍
  • 无扩容代价 - 不需要连续内存空间
  • 双向遍历 - 支持向前/向后查找(.Next/.Previous
// 实战案例:实时技能链系统
LinkedList<SkillNode> _comboChain = new LinkedList<SkillNode>();void AddSkill(SkillType type) {var newNode = new LinkedListNode<SkillNode>(new SkillNode(type));// 在链表尾部追加if (_comboChain.Last != null) {_comboChain.AddAfter(_comboChain.Last, newNode); } else {_comboChain.AddFirst(newNode);  // 首个节点}CheckComboPattern(newNode);
}// 检测连续技模式(前后各2个节点)
void CheckComboPattern(LinkedListNode<SkillNode> node) {var pattern = new List<SkillType>();// 向前收集2节点var prevNode = node.Previous?.Previous;if (prevNode != null) pattern.Add(prevNode.Value.Type);// 向后收集2节点var nextNode = node.Next?.Next;// 具体检测逻辑...
}

适用场景
✅ 高频增删的动态集合(游戏对象关系链)
✅ 需要双向遍历的结构(技能连招/对话树)
✅ 内存零碎化敏感场景(大型开放世界)

典型应用

  • RPG角色buff/debuff列表
  • 科技树/技能树结构
  • 实时策略游戏的单位编队

📊 关键数据结构性能对比表(10,000元素操作耗时)

操作ListHashSetQueueLinkedList
添加元素0.2 ms0.3 ms0.1 ms0.15 ms
头部/尾部删除0.5 msN/A0.01 ms0.01 ms
中部插入/删除180 msN/AN/A0.01 ms
元素存在性检查420 ms0.01 ms450 ms400 ms
内存占用(MB)2.54.02.53.8

📌 决策指南

  • 搜索极速HashSet
  • 顺序保证Queue
  • 高频增删LinkedList

实际开发中常组合使用,如用HashSet管理全局技能池,LinkedList处理当前连招链,Queue缓存玩家输入指令。

http://www.lryc.cn/news/601686.html

相关文章:

  • PandasAI连接LLM进行智能数据分析
  • LLM 多语言数据集
  • 《Java 程序设计》第 7 章 - 继承与多态
  • 9. 桥接模式
  • 递归查询美国加速-技术演进与行业应用深度解析
  • Cursor下利用Stagewise实现 “所见即改” 的前端开发体验~
  • MyBatis-Plus IService 接口全量方法实现与测试(续)
  • 【程序员私房菜】python尖椒炒口蘑
  • 神经网络模型训练需要的内存大小计算方法
  • 任务提醒工具怎么选?对比16款热门软件
  • 疯狂星期四文案网第21天运营日记
  • 商汤发布具身智能平台,让机器人像人一样和现实世界交互
  • EMCCD相机与电可调变焦透镜的同步控制系统设计与实现
  • Chainlink Functions:为智能合约插上连接现实世界的翅膀
  • PowerDesigner 画ER图并生成sql 教程
  • 青少年编程能力等级测评试卷及答案 Python编程(三级)
  • Rouge:面向摘要自动评估的召回导向型指标——原理、演进与应用全景
  • Java面试全方位解析:从基础到AI的技术交锋
  • 如何思考一个动态规划问题需要几个状态?
  • 负载均衡 LoadBalance
  • 阻止网页重定向
  • 6、企业信息化
  • 齐护Ebook科技与艺术Steam教育套件 可图形化micropython Arduino编程ESP32纸电路手工
  • 装修独栋别墅需要注意的细节有哪些?
  • 像素农场播种机-作物模拟器HTML+CSS+JavaScript
  • Linux 系统网络配置及 IP 地址相关知识汇总
  • JVM terminated. Exit code=1
  • 通俗理解主机的BIOS和UEFI启动方式
  • SpringBoot 整合 Langchain4j AIService 深度使用详解
  • uniapp input 聚焦时键盘弹起滚动到对应的部分