原文链接: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();
}