Generic Serializable Dictionary 使用教程

Generic Serializable Dictionary 使用教程

generic-serializable-dictionary Minimalist dictionary for Unity 2020 and above with native look and feel generic-serializable-dictionary 项目地址: https://gitcode.com/gh_mirrors/ge/generic-serializable-dictionary

1. 项目介绍

Generic Serializable Dictionary 是一个轻量级且极简的 Unity 字典实现,专为 Unity 2020.1 及以上版本设计。它具有原生的外观和感觉,使用 System.Collections.Generic 对象与 Unity 的泛型序列化器结合,实现了 IDictionary 接口,并且可以作为 ICollection 传递。该项目的目标是提供一个不需要为每种具体字典类型添加样板代码的通用字典实现,同时保持与 Unity 标准组件一致的外观和感觉。

2. 项目快速启动

2.1 安装

你可以通过以下几种方式安装 Generic Serializable Dictionary

2.1.1 使用 Unity Package Manager (UPM)

在 Unity 中打开 Package Manager,点击右上角的加号,选择 Add package from git URL,然后输入以下 URL:

https://github.com/upscalebaby/generic-serializable-dictionary.git

或者,你可以指定版本:

https://github.com/upscalebaby/generic-serializable-dictionary#1.0.2
2.1.2 手动添加到 manifest.json

你也可以手动编辑项目的 Packages 文件夹中的 manifest.json 文件,添加以下内容:

{
  "dependencies": {
    "com.upscalebaby.generic-serializable-dictionary": "https://github.com/upscalebaby/generic-serializable-dictionary.git#1.0.2"
  }
}
2.1.3 本地导入

你还可以将项目克隆到本地,然后通过 Add package from disk 选项将其添加到 Unity 项目中。

2.2 使用示例

在你的 Unity 脚本中,你可以像使用普通字典一样使用 GenericDictionary。以下是一个简单的示例:

using UnityEngine;

public class Example : MonoBehaviour
{
    // 声明字典类型,无需样板代码
    public GenericDictionary<string, GameObject> myGenericDict;

    void Start()
    {
        // 添加键值对
        myGenericDict.Add("test", this.gameObject);
    }
}

3. 应用案例和最佳实践

3.1 应用案例

Generic Serializable Dictionary 适用于需要在 Unity 编辑器中序列化和反序列化字典的场景。例如,你可以在 MonoBehaviour 或 ScriptableObject 中使用它来存储和管理游戏对象或其他资源的映射关系。

3.2 最佳实践

  • 避免键冲突:在添加键值对时,确保键是唯一的,以避免键冲突。
  • 使用属性绘制器:项目提供了一个可选的属性绘制器,可以在编辑器中以列表的形式显示字典,便于查看和管理。
  • 版本管理:建议在 manifest.json 中指定版本号,以确保项目的稳定性。

4. 典型生态项目

Generic Serializable Dictionary 可以与其他 Unity 项目和工具结合使用,例如:

  • Unity Addressables:用于管理游戏资源的加载和卸载。
  • Odin Inspector:提供强大的编辑器扩展功能,可以与 Generic Serializable Dictionary 结合使用,进一步提升开发效率。
  • UniRx:用于响应式编程,可以与字典结合使用,实现更复杂的数据流管理。

通过这些生态项目的结合,你可以构建更强大和灵活的 Unity 应用程序。

generic-serializable-dictionary Minimalist dictionary for Unity 2020 and above with native look and feel generic-serializable-dictionary 项目地址: https://gitcode.com/gh_mirrors/ge/generic-serializable-dictionary

在 Unity 中,我们可以使用 JsonUtility 类来实现对象的序列化和反序列化。对于 Dictionary 类型的对象,我们可以通过将其转换为一个包含键值对的 List 类型对象,然后对 List 类型对象进行序列化和反序列化。 下面是一个示例代码: ```csharp using System.Collections.Generic; using UnityEngine; [System.Serializable] public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, ISerializationCallbackReceiver { [SerializeField] private List<TKey> keys = new List<TKey>(); [SerializeField] private List<TValue> values = new List<TValue>(); // save the dictionary to lists public void OnBeforeSerialize() { keys.Clear(); values.Clear(); foreach (KeyValuePair<TKey, TValue> pair in this) { keys.Add(pair.Key); values.Add(pair.Value); } } // load dictionary from lists public void OnAfterDeserialize() { this.Clear(); for (int i = 0; i < keys.Count; i++) { this.Add(keys[i], values[i]); } } } [System.Serializable] public class MyData { public SerializableDictionary<string, int> myDict = new SerializableDictionary<string, int>(); } public static class JsonHelper { public static string ToJson<T>(T obj) { return JsonUtility.ToJson(obj); } public static T FromJson<T>(string json) { return JsonUtility.FromJson<T>(json); } } public class Example : MonoBehaviour { private MyData data = new MyData(); private void Start() { data.myDict.Add("key1", 1); data.myDict.Add("key2", 2); string json = JsonHelper.ToJson(data); Debug.Log(json); MyData loadedData = JsonHelper.FromJson<MyData>(json); Debug.Log(loadedData.myDict["key1"]); Debug.Log(loadedData.myDict["key2"]); } } ``` 在上面的示例代码中,我们定义了一个 SerializableDictionary 类来实现 Dictionary 的序列化和反序列化。在 MyData 类中使用了 SerializableDictionary 类型的成员变量 myDict。在 JsonHelper 类中,我们定义了 ToJson 和 FromJson 方法来将对象转换为 Json 字符串和从 Json 字符串中加载对象。在 Example 类中,我们创建了一个 MyData 对象,并向其中添加了两个键值对。我们将 MyData 对象转换为 Json 字符串并输出到控制台,然后从 Json 字符串中加载了一个新的对象,并输出了其中的两个值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙香令Beatrice

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值