介绍Unity中的Dictionary

在 Unity(C#)中,Dictionary 是一个非常常用的数据结构,它提供 键值对(Key-Value Pair) 的存储方式。类似于 Python 的 dict 或 JavaScript 的对象(Object),但它是强类型的、使用泛型。


基础概念:什么是 Dictionary?

C# 中的 Dictionary<TKey, TValue> 是一个泛型集合,你可以根据某个键(Key)快速查找、添加或删除对应的值(Value)。

适合用在什么时候?

  • 需要快速查找(复杂度约为 O(1))

  • 想通过"某个唯一标识"存储对应数据,如:

    • ID → 玩家对象
    • 名字 → 数值
    • 类型 → Prefab

常用语法

1. 声明 Dictionary

csharp 复制代码
Dictionary<string, int> scoreDict = new Dictionary<string, int>();

2. 添加数据

csharp 复制代码
scoreDict.Add("Player1", 100);

3. 读取数据

csharp 复制代码
int score = scoreDict["Player1"];

4. 修改数据

csharp 复制代码
scoreDict["Player1"] = 200;

5. 判断是否包含某个键

csharp 复制代码
if (scoreDict.ContainsKey("Player1")) {
    Debug.Log("存在 Player1");
}

6. 遍历 Dictionary

csharp 复制代码
foreach (KeyValuePair<string, int> entry in scoreDict)
{
    Debug.Log(entry.Key + ": " + entry.Value);
}

7. 删除键值对

csharp 复制代码
scoreDict.Remove("Player1");

Unity 实战场景示例

示例:根据字符串名字加载预制体

csharp 复制代码
public class PrefabManager : MonoBehaviour
{
    public GameObject redGem;
    public GameObject blueGem;

    private Dictionary<string, GameObject> prefabDict;

    void Start()
    {
        prefabDict = new Dictionary<string, GameObject>();
        prefabDict.Add("Red", redGem);
        prefabDict.Add("Blue", blueGem);

        GameObject gem = Instantiate(prefabDict["Red"], new Vector2(0, 0, 0), Quaternion.identity);
    }
}

⚠️ 注意事项

  1. 键(Key)不能重复,否则会抛异常。
  2. 如果你不确定键是否存在,请用 .ContainsKey().TryGetValue()
  3. Dictionary 是无序的。如果你需要有序,可以用 SortedDictionaryList<KeyValuePair<>>
相关推荐
AllBlue8 小时前
unity调用安卓方法
android·unity·游戏引擎
郝学胜-神的一滴9 小时前
Horse3D游戏引擎研发笔记(十):在QtOpenGL环境下,视图矩阵与投影矩阵(摄像机)带你正式进入三维世界
c++·3d·unity·游戏引擎·godot·图形渲染·unreal engine
AllBlue11 小时前
unity导出成安卓工程,集成到安卓显示
android·unity·游戏引擎
Sator114 小时前
Unity的FishNet相关知识
网络·unity·游戏引擎
AllBlue14 小时前
安卓调用unity中的方法
android·unity·游戏引擎
李岱诚16 小时前
epic商城下载,ue4报错处理
游戏引擎·ue4
jtymyxmz1 天前
《Unity Shader》10.1.4 折射
unity·游戏引擎
在路上看风景1 天前
12. Burst
unity
平行云PVT1 天前
实时云渲染解决UE5 像素流插件迁移及传输数据受限问题
unity·ue5·xr·实时云渲染·云桌面·像素流·云推流
熬夜敲代码的小N1 天前
Unity WebRequest高级操作:构建高效稳定的网络通信模块
android·数据结构·unity·游戏引擎