Unity编辑器扩展——自定义Inspector面板

一:Editor类

Editor类和EditorWindow类都继承自同一个基类:ScriptableObject,他们均可以针对某种脚本类来进行操做
Editor类只能对指定脚本进行扩展,Inspector面板的显示,或变量在Scene视图中的可视化ide

使用到的类:
——GUILayout:绘制各类2D控件,好比按钮、文本、可折叠列表,以及对它们的分组和排版。这些控件既能够绘制在Editor类里,也能够绘制在EditorWindow里
——EditorGUILayout:与GUILayout相似,可是提供更多的预约义控件
——GUIUtility:绘制自定义的2D控件,好比进度条、对话框、打开文件夹
——EditorGUIUtility:绘制自定义的2D控件,好比进度条、对话框、打开文件夹
spa

重写OnInspectorGUI方法进行绘制code


二:案例

例如一个正常继承MonoBehaviour的脚本Test,定义了一个float类型的公有变量move_speed和一个float类型的公有变量rotation_speed,以及一个bool类型的isMove

如上图所示,Inspector面板中显示定义的三个参数,可是这样赋值时容易产生混淆,因此如今咱们有这样一个需求,当isMove勾选上则面板上显示move_speed变量,当isMove未勾选上则面板上显示rotation_speed变量blog

新建一个脚本(通常命名为须要被扩展的脚本名+Editor,例如Test脚本的Inspector扩展类命名为TestEditor),脚本须要继承自Editor,咱们知道自定义的Window窗口须要在OnGUI中绘制,而自定义的Inspector面板须要在OnInspectorGUI中绘制

继承

using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(Test))]
public class TestEditor : Editor
{
    public override void OnInspectorGUI()
    {
        Test t = (Test)target;

        t.isMove = EditorGUILayout.Toggle("是否为移动", t.isMove);
        if (t.isMove)
        {
            EditorGUILayout.FloatField("移动速度", t.move_speed);
        }
        else
        {
            EditorGUILayout.FloatField("旋转速度", t.rotation_speed);
        }
    }
}
相关文章
相关标签/搜索