【Unity】 HTFramework框架(六十三)SerializableDictionary可序列化字典

更新日期:2025年3月26日。

Github 仓库:https://github.com/SaiTingHu/HTFramework

Gitee 仓库:https://gitee.com/SaiTingHu/HTFramework

索引

一、SerializableDictionary可序列化字典

SerializableDictionary<,>可序列化字典类型支持序列化(用于替代不可序列化的Dictionary<,>类型),其拥有与Dictionary<,>一样的适用于频繁查找、插入和删除数据的性能优势。

1.使用SerializableDictionary

使用SerializableDictionary很简单,直接定义SerializableDictionary的可序列化字段即可:

csharp 复制代码
public class Test : HTBehaviour
{
    [Label("简单字典示例")] public SerializableDictionary<string, string> d1;
    [Label("复杂字典示例")] public SerializableDictionary<string, Data> d2;

    protected override void Awake()
    {
        base.Awake();

        foreach (var item in d1)
        {
            Debug.Log($"简单字典示例中元素:{item.Key} - {item.Value}");
        }
        foreach (var item in d2)
        {
            Debug.Log($"复杂字典示例中元素:{item.Key} - {item.Value}");
        }
    }

    [Serializable]
    public class Data
    {
        public string Name;
        public int Age;
        public Vector2 Pos;
        public Vector3 Angle;
        public Material Cloth;
    }
}

在检视器面板是可序列化的(同时支持为其附加各种Inspector特性):

Tips:为了降低各键值对(Key-Value)之间的视觉干扰,只有选中的键值对(Key-Value)呈现为亮色,其他的显示为暗色。

运行场景:

2.实现思路

实现思路其实很简单,SerializableDictionary中维护了两个List用于序列化键值对(Key-Value),然后在运行时动态构建一个Dictionary。

二、SerializableHashSet可序列化哈希集

SerializableHashSet<>可序列化哈希集类型支持序列化(用于替代不可序列化的HashSet<>类型),其拥有与HashSet<>一样的适用于频繁查找、插入和删除数据的性能优势。

1.使用SerializableHashSet

使用SerializableHashSet很简单,直接定义SerializableHashSet的可序列化字段即可:

csharp 复制代码
public class Test : HTBehaviour
{
    [Label("简单哈希集示例")] public SerializableHashSet<string> s1;
    [Label("复杂哈希集示例")] public SerializableHashSet<Data> s2;

    protected override void Awake()
    {
        base.Awake();

        foreach (var item in s1)
        {
            Debug.Log($"简单哈希集示例中元素:{item}");
        }
        foreach (var item in s2)
        {
            Debug.Log($"复杂哈希集示例中元素:{item}");
        }
    }

    [Serializable]
    public class Data
    {
        public string Name;
        public int Age;
        public Vector2 Pos;
        public Vector3 Angle;
        public Material Cloth;
    }
}

在检视器面板是可序列化的(同时支持为其附加各种Inspector特性):

运行场景:

2.实现思路

实现思路其实很简单,SerializableHashSet中维护了一个List用于序列化,然后在运行时动态构建一个HashSet。

相关推荐
探求虚无1 天前
用 AI 在 Unity 里做一款 RTS:最难的不是生成代码,而是证明它真的能玩
人工智能·unity·游戏引擎
caoliaoerweima1 天前
草料二维码小程序上线活码编辑器:手机上也能编辑活码了
智能手机·小程序·编辑器·草料二维码
慧都产品智能化2 天前
Qt 表格升级攻略:复用已有编辑器,减少重复开发
c++·qt·编辑器·qt6.3
17岁的勇气2 天前
Unity Shader unity文档学习笔记(二十二):shader变体
笔记·学习·unity
DFT计算杂谈3 天前
可DIY布里渊区图像绘制编辑器
人工智能·机器学习·语言模型·矩阵·编辑器
寂寞的船3 天前
【Unity知识速递】第10期 Unity GC 零分配实战:从 UnityEngine.Pool 到手动 GC 控制的全链路优化
jvm·unity·c#·游戏引擎·lucene
Martina_03214 天前
AI生成3D场景的霓虹灯一开就糊成光团?用6步检查Emissive、Bloom与曝光
人工智能·3d·ai·自然语言处理·游戏引擎·材质·贴图
寂寞的船5 天前
【Unity知识速递】第8期 IL2CPP 托管堆内存碎片与原生堆交互机制深度解析
unity·游戏引擎·交互
Ravenq~5 天前
无头转换:把 .docx 变成 PDF,不打开编辑器
pdf·编辑器
寂寞的船6 天前
【Unity知识速递】第5期 Unity 6.2 深度解析:AI Assistant 登场,World Space UI 与 Sentis 全面升级
人工智能·ui·unity