You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:13:13