Unity 报错 EndLayoutGroup: BeginLayoutGroup must be called first

原文链接:https://blog.csdn.net/xmx5166/article/details/107758668

网络上查找排查:核心问题还是一句话就能解决,就是GUIUtility.ExitGUI();当然也有可能会踩坑(只能怪自己不怎么熟悉编辑器扩展),这一句话我加在OnInspectorGUI()末尾的时候,发现扩展面板不能使用了,后来细心查找并排查问题,发现是在点击一个按钮操作后爆出的错,所以将这句话添加到了按钮点击执行域里面了,然后问题就解决了

我的部分代码

void OnGUI()
    {
    
    
        EditorGUILayout.BeginVertical();

        ScrollPos = EditorGUILayout.BeginScrollView(ScrollPos);

        //绘制标题
        GUILayout.Space(10);
        GUILayout.Label("Create/Update Xml");

        //读取asset数据
        asset = EditorGUILayout.ObjectField("选取Xml数据", asset, typeof(XmlAsset), true) as XmlAsset;
        if (asset != null)
        {
    
    
            XmlName = asset.XmlName;
            root = asset.root;
            child = asset.child;
        }

        //xml的名字
        GUILayout.Space(10);
        XmlName = EditorGUILayout.TextField("XML Name", XmlName);
        if (!HasXmlNameContent())
        {
    
    
            EditorGUILayout.HelpBox("XML文件名不能为空!", MessageType.Error);
        }

        //根节点名称
        GUILayout.Space(10);
        root = EditorGUILayout.TextField("Root Name", root);
        if (!HasRootNameContent())
        {
    
    
            EditorGUILayout.HelpBox("根节点不能为空!", MessageType.Error);
        }

        //子节点信息
        GUILayout.Space(10);
        _serializedObject.Update();
        //检查是否有修改
        EditorGUI.BeginChangeCheck();
        //显示
        EditorGUILayout.PropertyField(_assetLstProperty, true);
        //当检查结束时应用最新修改数据
        if (EditorGUI.EndChangeCheck())
        {
    
    
            _serializedObject.ApplyModifiedProperties();
        }

        if (!HasChildContent())
        {
    
    
            EditorGUILayout.HelpBox("子节点不能为空!", MessageType.Error);
        }

        GUILayout.Space(10);
        isSaveAsset = GUILayout.Toggle(isSaveAsset, "是否保存数据为Asset资源");

        if (GUILayout.Button("Create/Update XML"))
        {
    
    
            if (CheckInputData())
            {
    
    
                CreateXml(XmlName);
                if (isSaveAsset)
                {
    
    
                    SaveAsset();
                    GUIUtility.ExitGUI(); //在这里添加这一句,报错消失
                }
            }
        }

        EditorGUILayout.EndScrollView();
        EditorGUILayout.EndVertical();
    }

猜你喜欢

转载自blog.csdn.net/weixin_44238530/article/details/127913625
今日推荐