【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 小时前
拒绝重复造轮子?我们偏偏花365天,用Vue3写了款AI协同的Word编辑器
人工智能·编辑器·word
风一样的航哥1 小时前
标题:从卡顿到流畅:深度剖析 Word 2013 与 Word 2021 处理高清图片文档的性能鸿沟
编辑器
GLDbalala3 小时前
Unity基于自定义管线实现经典经验光照模型
unity·游戏引擎
冬奇Lab5 小时前
一天一个开源项目(第14篇):CC Workflow Studio - 可视化AI工作流编辑器,让AI自动化更简单
人工智能·开源·编辑器
心疼你的一切5 小时前
Unity异步编程神器:Unitask库深度解析(功能+实战案例+API全指南)
深度学习·unity·c#·游戏引擎·unitask
承渊政道7 小时前
Linux系统学习【Linux基础开发工具】
linux·运维·笔记·学习·centos·编辑器
呆呆敲代码的小Y7 小时前
【Unity 实用工具篇】 | Book Page Curl 快速实现翻书效果
游戏·unity·游戏引擎·u3d·免费游戏·翻书插件
AC梦20 小时前
unity中如何将UI上的字高清显示
ui·unity
徐小夕@趣谈前端1 天前
Web文档的“Office时刻“:jitword共建版2.0发布!让浏览器变成本地生产力
前端·数据结构·vue.js·算法·开源·编辑器·es6
zhanglianzhao1 天前
Win 11 WSL 配置Claude code 并在VsCode中使用
ide·vscode·编辑器·claude·cladue code