【问题标题】:How to be able to toggle true/false each single toggle box in editor window?如何能够在编辑器窗口中切换每个单个切换框的真/假?
【发布时间】:2022-07-07 21:43:29
【问题描述】:

问题是我遍历对象数组。 objects 是选择游戏对象的数组。

当我遍历它并创建切换时,当我选中/取消选中单个切换框时,它会选中/取消选中所有切换。我怎样才能让它只切换一个?

我检查的那个我只希望他启用真/假。

循环部分:

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;
                        include1 = EditorGUILayout.Toggle("Include Children", include1, GUILayout.ExpandWidth(true));
                    }
                    EditorGUILayout.EndHorizontal();
                }
                EditorGUILayout.EndScrollView();
    
                EditorGUI.indentLevel--;
            }

include1 是我希望能够启用真/假个人的切换。

其余代码:

public void OnGUI()
    {
        GUILayout.Space(10);
        childrenPrefix = EditorGUILayout.TextField("Rename prefix", childrenPrefix);
        startIndex = EditorGUILayout.IntField("Start index", startIndex);
        includeChildren = EditorGUILayout.Toggle("Include Children", includeChildren);

        if (objects.Length == 0)
        {
            showPosition = false;
        }
        GUILayout.Space(20);
        EditorGUI.BeginChangeCheck();
        EditorGUILayout.GetControlRect(true, 16f, EditorStyles.foldout);
        Rect foldRect = GUILayoutUtility.GetLastRect();
        if (Event.current.type == EventType.MouseUp && foldRect.Contains(Event.current.mousePosition))
        {
            showPosition = !showPosition;
            GUI.changed = true;
            Event.current.Use();
        }

        showPosition = EditorGUI.Foldout(foldRect, showPosition, "Objects");
        GUILayout.Space(2);

        if (showPosition)
        {
            EditorGUI.indentLevel++;

            scrollPos =
            EditorGUILayout.BeginScrollView(scrollPos);
            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;
                    include1 = EditorGUILayout.Toggle("Include Children", include1, GUILayout.ExpandWidth(true));
                }
                EditorGUILayout.EndHorizontal();
            }
            EditorGUILayout.EndScrollView();

            EditorGUI.indentLevel--;
        }

        GUILayout.FlexibleSpace();
        if (GUILayout.Button("Rename Objects"))
        {

        }

        Repaint();
    }

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    让你的 include1 成为一个 bool 数组,这样每个项目都有自己的值

    【讨论】:

      猜你喜欢
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 2020-12-02
      相关资源
      最近更新 更多