1、先说遇到的问题
首先是有问题的GameObject属性显示
左边是普通场景物体,右边是预制体
上边是不正常,下边是正常情况
一开始我只是以为属性显示的GUI排列怪怪的,有点陌生,等我习惯性的要去点击隐藏物体的时候 我直接一脸问号?????
2、查找原因
1、我一开始以为是Unity的project setting或者 首选项 里的设置没对,一通操作把每个设置都看完了,得,也没白忙活,起码排除了这个原因
2、然后我以为是自定义Editer,对GameObject的Inspector面板属性显示布局做了修改,我全局搜索一看,只有一个工具类关联了
[CustomEditor(typeof(GameObject))]
public class XXXXXXXXXX : Editor
{
}
但是里面没有重写 OnInspectorGUI() ,如下
public override void OnInspectorGUI()
{
}
3、水落石出
我又一通操作到处查,结论是:
1、工具类关联GameObject的时候
[CustomEditor(typeof(GameObject))]
public class XXXXXXXXXX : Editor
{
}
Inspector属性绘制由父类 Editor.OnInspectorGUI() 完成
其余时候,由Unity内置的 GameObjectEditor.OnInspectorGUI() 完成
2、重点
由父类 Editor.OnInspectorGUI() 对GameObject的属性进行绘制时,有BUG,再次看图
很多都没有绘制出来:
1、显示/隐藏勾选框
2、Tag Layer 下拉按钮
如果是预制体
3、打开和选中预制体的按钮
4、应用预制体修改的下拉按钮
4、结论
2020.3版本情况下
Unity一些内置组件,如 GameObject ,自定义其Inspector面板显示时,或者工具类关联了 这些组件
[CustomEditor(typeof(GameObject))]
那么此时由父类
Editor.OnInspectorGUI()
进行绘制时,会出现BUG,导致部分属性无法绘制到 Inspector 面板上
5、解决方法
1、工具类不要关联这些内置组件
[CustomEditor(typeof(GameObject))]
2、模仿正常的面板显示布局
重写 OnInspectorGUI()
public override void OnInspectorGUI()
{
}
些许示范一下
public override void OnInspectorGUI()
{
serializedObject.Update();
GameObject myObj = target as GameObject;
EditorGUILayout.BeginHorizontal();
myObj.SetActive(EditorGUILayout.Toggle(myObj.activeSelf, GUILayout.Width(20)));
myObj.name = EditorGUILayout.TextField(myObj.name, GUILayout.ExpandWidth(true));
myObj.isStatic = EditorGUILayout.Toggle(myObj.isStatic, GUILayout.Width(15));
EditorGUILayout.LabelField("Static", GUILayout.Width(50));
EditorGUILayout.EndHorizontal();
serializedObject.ApplyModifiedProperties();
}
效果如下图
这里我只写了 显示/隐藏勾选框、名称、是否静态
其余放模仿正常Inspector面板布局写就行了
完结撒花