如何遍历Dictionary的键并在Unity编辑器窗口显示序号与键值对
Unity编辑器中遍历Dictionary<GameObject, string>并格式化展示的解决方法
方法一:直接遍历KeyValuePair(推荐)
直接通过foreach遍历字典的KeyValuePair集合,同时维护序号即可:
// 定义你的Dictionary字段 private Dictionary<GameObject, string> objectScriptMap = new Dictionary<GameObject, string>(); private void OnGUI() { int serialNumber = 1; foreach (var pair in objectScriptMap) { // 跳过已销毁的GameObject,避免空引用 if (pair.Key == null) continue; // 按要求格式化文本 string displayContent = $"{serialNumber} {pair.Key.name} - {pair.Value}"; // 在编辑器窗口绘制文本 GUILayout.Label(displayContent); serialNumber++; } }
方法二:转为List后用for循环遍历
如果坚持要用for循环,先把字典的键集合转为List<GameObject>,再通过索引访问键和对应的值:
private void OnGUI() { List<GameObject> targetObjects = new List<GameObject>(objectScriptMap.Keys); for (int i = 0; i < targetObjects.Count; i++) { GameObject obj = targetObjects[i]; // 跳过空对象 if (obj == null) continue; string scriptName = objectScriptMap[obj]; string displayContent = $"{i+1} {obj.name} - {scriptName}"; GUILayout.Label(displayContent); } }
额外提示
- 加上
pair.Key == null的判断,防止场景中GameObject被删除后出现空引用报错 - 如果需要更美观的布局,可以用
EditorGUILayout替代GUILayout,配合EditorStyles调整样式
内容的提问来源于stack exchange,提问作者Daniel Lip
相关产品推荐
相关产品推荐

