问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Unity工具类Editor自定义Inspector面板踩坑 显示隐藏没了?

创作时间:
作者:
@小白创作中心

Unity工具类Editor自定义Inspector面板踩坑 显示隐藏没了?

引用
CSDN
1.
https://blog.csdn.net/qq_40385747/article/details/144031942

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面板布局写就行了

完结撒花

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号