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.pswp.cn/diannao/93454.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93454.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93454.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智慧園區:科技與生活的完美融合

在城市的喧囂中&#xff0c;我們常常渴望一片寧靜而充滿活力的綠洲。如今&#xff0c;隨著科技的飛速發展&#xff0c;智慧園區應運而生&#xff0c;它不僅滿足了我們對美好生活的向往&#xff0c;更以其獨特的魅力&#xff0c;成為現代城市中一道亮麗的風景線。今天&#xff0…

繼續打卡day6

383. 贖金信 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool canConstruct(string ransomNote, string magazine) {unordered_map<char, int> us;for(auto c: ransomNote){us[c]; // 將字符串存儲}for(auto c: magazine){if(us.count(c)){us[c]-…

LIMA:大語言模型對齊的“少即是多”革命——原理、實驗與范式重構

“千樣本激活千億參數&#xff1a;重新定義大模型對齊的本質” LIMA&#xff08;Less Is More for Alignment&#xff09; 是由 Meta AI 聯合 卡內基梅隆大學 等機構于 2023年 提出的突破性大模型對齊框架&#xff0c;其核心顛覆了傳統對齊需海量數據的認知&#xff0c;證明僅用…

vite.config.js常用配置

vite.config.js常用配置 import { defineConfig } from vite import { resolve } from "path"; import vue from vitejs/plugin-vueexport default defineConfig({plugins: [vue(), ], // 配置需要使用的插件列表base: ./, // 在生產中服務時的基本公共路徑publicD…

JVM知識點(2)

目錄 Java中可作為GC Roots的引用有哪幾種&#xff1f; finalize方法 垃圾回收算法 標記-清除 標記-復制 標記-整理 分代收集算法 為什么要用分代收集 標記復制的標記過程和復制會不會停頓 MinorGC&#xff0c;MajorGC&#xff0c;MixedGC&#xff0c;FullGC FullGC…

Java HashMap中的compute及相關方法詳解:從基礎到Kafka Stream應用

HashMap是Java集合框架中最常用的數據結構之一&#xff0c;它提供了高效的鍵值對存儲和檢索功能。在Java8中&#xff0c;HashMap引入了一系列新的原子性更新方法&#xff0c;包括compute()、computeIfAbsent()和computeIfPresent()等&#xff0c;這些方法極大地簡化了在Map中進…

【php中ssti模板注入講解】

php中場景模板 1. Smarty 使用安全模式來執行不信任的模板,只運行PHP白名單里的函數。 2. Twig 與Smarty類似,不過無法利用該模板的SSTI調用靜函數。 php常見模板入門 Smarty 不使用預先準備好的模板 使用預先準備好的模板 對值進行拼接后使用模板展示 設置在模板中…

Redis學習07-Redis的過期策略

Redis 過期策略 什么是過期策略 Redis 的過期策略用于管理設置了過期時間&#xff08;TTL&#xff09;的鍵&#xff0c;確保在鍵過期后能夠被及時刪除&#xff0c;從而釋放內存 整體策略 Redis 采用的是定期刪除惰性刪除的組合策略 1. 定期刪除 原理&#xff1a;周期性的從過期…

深入解讀c++(命名空間)

目錄 1關于命名空間 1.1是什么 1.2解決了什么問題 2.命名空間的定義 2.2命名空間的嵌套定義 3命名空間的特點 3.1命名空間不會影響生命周期 3.2命名空間只能在全局域里定義&#xff0c;當然嵌套定義時例外。 3.3在不同文件中定義相同名稱的命名空間 4.命名空間的使用 …

ClickHouse高性能實時分析數據庫-高性能的模式設計

告別等待&#xff0c;秒級響應&#xff01;這不只是教程&#xff0c;這是你駕馭PB級數據的超能力&#xff01;我的ClickHouse視頻課&#xff0c;凝練十年實戰精華&#xff0c;從入門到精通&#xff0c;從單機到集群。點開它&#xff0c;讓數據處理速度快到飛起&#xff0c;讓你…

ArkTS懶加載LazyForEach的基本使用

在 ArkTS 的開發中&#xff0c;如果你要渲染一個很長的列表&#xff0c;比如商品列表、評論列表或者朋友圈動態&#xff0c;用傳統的循環結構&#xff08;比如 ForEach&#xff09;很容易導致性能問題&#xff0c;尤其是加載慢、卡頓甚至內存暴漲。 這時候就要用到 懶加載渲染組…

動態規劃:從入門到精通

本文全章節一共一萬七千多字&#xff0c;詳細介紹動態規劃基礎與進階技巧&#xff0c;全篇以代碼為主&#xff0c;認真讀完理解&#xff0c;你對動態規劃的理解一定會有一個質的飛躍。一、動態規劃簡介: 動態規劃&#xff08;Dynamic Programming&#xff0c;簡稱DP&…

八股訓練營 40 天心得:一場結束,也是一場新的開始

八股訓練營 40 天心得&#xff1a;一場結束&#xff0c;也是一場新的開始 感謝卡哥的訓練營組織卡碼筆記&#xff0c;對即將參加秋招的我們幫助了很多&#xff0c;感謝卡哥的開源代碼隨想錄代碼隨想錄 四十天前&#xff0c;我帶著一顆不安卻堅定的心&#xff0c;踏入了這場“…

STM32系統定時器(SysTick)詳解:從原理到實戰的精確延時與任務調度

前言&#xff1a;為什么SysTick是嵌入式開發的"瑞士軍刀"&#xff1f; 在STM32開發中&#xff0c;我們經常需要精確的延時功能&#xff08;如毫秒級延時控制LED閃爍&#xff09;或周期性任務調度&#xff08;如定時采集傳感器數據&#xff09;。實現這些功能的方式有…

【微信小程序】12、生物認證能力

1、生物認證 生物認證 是一種基于個體獨特生理或行為特征進行身份驗證的技術,廣泛應用于安全、金融、醫療等領域。 小程序目前暫時只支持指紋識別認證。 2、查詢支持的生物認證方式 獲取本機支持的 SOTER 生物認證方式&#xff0c;文檔 onLoad(options) {wx.checkIsSuppor…

高級機器學習

機器學習常見方法涉及方法&#xff1a;2.半監督學習3.無監督學習4.度量學習5.遷移學習6.多示例多標記學習7.在線學習8.元學習9.聯邦學習10.強化學習11.概率圖模型獨立同分布獨立指的是&#xff0c;樣本集包括訓練集測試集的任意兩個樣本之間都是不相關的。在表示樣本的特征確定…

Chrome 提示 “此擴展程序不再受支持”(MacOS/Windows)

原因 最新 Chrome 使用 Manifest V3, 并在新版瀏覽器中 停止 V2 支持 處理方法 MacOS 新建一個后綴為 .mobileconfig 的文件, 內容參考 <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN&…

C++20協程實戰:高效網絡庫、手機終端、多媒體開發開發指南

基于C++協程和事件循環的網絡庫 以下是基于C++協程和事件循環的網絡庫實例,涵蓋常見場景和功能實現。示例基于libuv、Boost.Asio或自定義事件循環,結合C++20協程(如std::coroutine)或其他協程庫(如cppcoro)實現。 基礎TCP服務器 #include <cppcoro/task.hpp> #in…

數據庫4.0

索引 事務 JDBC~ 目錄 一、MySQL索引 1.0 概述 2.0 相關操作 3.0 注意 4.0 索引背后的原理的理解 二、 事務 1.0 原子性 2.0 隔離性 (1)并發執行 (2) 出現的問題 3.0 使用 三、JDBC編程 1.0 概述 2.0 如何下載驅動包 3.0 jar如何引入到項目之中 4.0 jdbc…

HarmonyOS-ArkUI Web控件基礎鋪墊6--TCP協議- 流量控制算法與擁塞控制算法

HarmonyOS-ArkUI Web控件基礎鋪墊1-HTTP協議-數據包內容-CSDN博客 HarmonyOS-ArkUI Web控件基礎鋪墊2-DNS解析-CSDN博客 HarmonyOS-ArkUI Web控件基礎鋪墊3--TCP協議- 從規則本質到三次握手-CSDN博客 HarmonyOS-ArkUI Web控件基礎鋪墊4--TCP協議- 斷聯-四次揮手解析-CSDN博客…