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

Unity Editor窗口如何实现各Toggle框独立切换true/false状态

问题根因

所有行的Toggle控件都绑定了同一个全局布尔变量include1。Unity Editor的OnGUI是每帧重复执行的,循环内生成的每个Toggle都会读取这个公共变量的值渲染勾选状态,点击任意Toggle时又会把新的勾选值写回这同一个变量,直接导致所有Toggle状态完全同步,改一个全变。

修复方案

要实现每个Toggle独立切换,必须给列表里每一个GameObject分配独立的状态存储空间,不能共用单个布尔变量。

  • 删除原有单个include1变量,新增和objects数组下标一一对应的布尔数组,用来存储每个对象对应的"Include Children"勾选状态
  • 渲染前做数组长度校验,当objects数组增删元素导致长度变化时,同步调整布尔数组长度,同时保留已有条目的原有勾选状态,避免下标越界
  • 循环渲染Toggle时,读写当前循环下标对应的布尔数组元素,不再操作全局公共变量
修复后代码示例

首先替换类中的成员变量定义:

// 注释/删除原有单变量定义:public bool include1;
// 替换为和objects一一对应的状态数组
public GameObject[] objects;
public bool[] includeChildFlags;

然后替换OnGUI中折叠区域内的滚动列表逻辑:

if (showPosition)
{
    EditorGUI.indentLevel++;
    scrollPos = EditorGUILayout.BeginScrollView(scrollPos);

    // 同步状态数组长度,避免下标越界
    if (includeChildFlags == null || includeChildFlags.Length != objects.Length)
    {
        bool[] tempFlags = new bool[objects.Length];
        if (includeChildFlags != null)
        {
            // 拷贝已有状态,避免调整数组长度时原有勾选状态丢失
            int copyCount = Mathf.Min(includeChildFlags.Length, tempFlags.Length);
            System.Array.Copy(includeChildFlags, tempFlags, copyCount);
        }
        includeChildFlags = tempFlags;
    }

    for (int i = 0; i < objects.Length; i++)
    {
        EditorGUIUtility.labelWidth = 50;
        EditorGUILayout.BeginHorizontal();
        {
            GUILayoutOption[] options = { GUILayout.MaxWidth(300.0f), GUILayout.MinWidth(300.0f) };
            objects[i] = (GameObject)EditorGUILayout.ObjectField(i.ToString(), objects[i], typeof(GameObject), true, options);
            EditorGUIUtility.labelWidth = 112;
            // 读写当前下标对应的独立状态
            includeChildFlags[i] = EditorGUILayout.Toggle("Include Children", includeChildFlags[i], GUILayout.ExpandWidth(true));
        }
        EditorGUILayout.EndHorizontal();
    }
    EditorGUILayout.EndScrollView();
    EditorGUI.indentLevel--;
}

后续执行重命名逻辑时,直接遍历includeChildFlags[i]就能拿到对应objects[i]是否需要包含子物体的配置。


内容的提问来源于stack exchange,提问作者Daniel Lip

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:24:31