老规矩,先介绍一下 Unity 的科普小知识:
由于默认的Dictionary是不能被序列化到Unity的监视器面板中的,所以就需要做一些额外处理来让其显示到Inspector上以满足我们的配置。
简单实现方法主要有两种:
方法一 实现方式如下:
此时就可以在Inspector监视器面板中配置数值了,有需要的话赋值后可以把值添加到字典中,然后控制字典的增删改查就可以啦。
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class DicTest : MonoBehaviour
{
[System.Serializable]
public struct PrefabData
{
public int id;
public string name;
}
public PrefabData[] prefabDatas;
public List<PrefabData> prefabDataList = new List<PrefabData>();
public Dictionary<int, string> prefabDataDic = new Dictionary<int, string>();
private void Start()
{
// 字典内容添加
for (int i = 0; i < prefabDataList.Count; i++)
{
prefabDataDic.Add(prefabDataList[i].id, prefabDataList[i].name);
}
}
}
实现效果如下:
方法二 实现方式如下:
在Unity中导入Odin插件,然后在脚本中添加命名空间using Sirenix.OdinInspector
,将脚本类继承SerializedMonoBehaviour
。
这样我们正常定义字典结构,字典就可以正常显示在Inspector面板中啦!
using System.Collections.Generic;
using UnityEngine;
using Sirenix.OdinInspector;
public class DicTest : SerializedMonoBehaviour
{
public Dictionary<int, string> prefabDataDic = new Dictionary<int, string>();
}
实现效果如下:
Odin插件时Unity中比较常用的编辑器扩展插件,可以帮助我们在监视器面板中自定义多种显示效果,后面会专门出文章介绍此插件的使用~