拓展编辑器(二十)_面板拓展(Inspector面板

Posted llllllvty

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拓展编辑器(二十)_面板拓展(Inspector面板相关的知识,希望对你有一定的参考价值。

  我们的Unity脚本挂在游戏对象上时,右侧会出现它的详细信息面板,这些信息是根据脚本中声明的public可序列化变量而来的。此外,也可以通过EditorGUI来对它进行绘制,让面板更具可操作性。

Inspector面板

  EditorGUI和GUI的用法几乎完全一致,目前来说前者多用于编辑器开发,后者多用于发布后调试编辑器。即他们都是起辅助作用的。EditorGUI提供丰富的组件非常丰富,常用的绘制元素包括文本,按钮,图片和滑动框等。做一个好的编辑器,是离不开EditorGUI的。  

  如图所示,我们将EditorGUI拓展在Inspector面板上了技术分享图片

  实现代码如下所示:

using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif

public class Inspector面板 : MonoBehaviour
{
    public Vector3 scrollPos;
    public int myId;
    public string myName;
    public GameObject prefab;
    public MyEnum myEnum = MyEnum.One;
    public bool toogle1;
    public bool toogle2;
    public enum MyEnum
    {
        One=1,
        Two
    }
}

#if UNITY_EDITOR
[CustomEditor(typeof(Inspector面板))]
public class Inspector面板Editor : Editor
{
    private bool m_EnableToogle;
    public override void OnInspectorGUI()
    {
        //获取脚本对象
        Inspector面板 script = target as Inspector面板;
        //绘制滚动条
        script.scrollPos =
                EditorGUILayout.BeginScrollView(script.scrollPos, false, true);

        script.myName = EditorGUILayout.TextField("text", script.myName);
        script.myId = EditorGUILayout.IntField("text", script.myId);
        script.prefab = EditorGUILayout.ObjectField("GameObject", script.prefab,
            typeof(GameObject), true) as GameObject;


        //绘制按钮
        EditorGUILayout.BeginHorizontal();
        GUILayout.Button("1");
        GUILayout.Button("2");
        script.myEnum = (Inspector面板.MyEnum)EditorGUILayout.EnumPopup("MyEnum:", 
            script.myEnum);
        EditorGUILayout.EndHorizontal();

        //Toogle组件
        m_EnableToogle = EditorGUILayout.BeginToggleGroup("EnableToogle", m_EnableToogle);
        script.toogle1 = EditorGUILayout.Toggle("toogle1", script.toogle1);
        script.toogle2 = EditorGUILayout.Toggle("toogle2", script.toogle2);
        EditorGUILayout.EndToggleGroup();

        EditorGUILayout.EndScrollView();
    }
}
#endif

  在上述代码中,我们将脚本部分和Editor部分的代码合在一个文件中。如果需要拓展的面板比较复杂,建议分成两个文件存放,一个是脚本另外一个是Editor文件。

PS:关于EditorGU类中的方法,可以在Unity的API中查询,也可以参考一下这个:https://www.cnblogs.com/caymanlu/p/5722549.html

 

以上是关于拓展编辑器(二十)_面板拓展(Inspector面板的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D研究院之在开始学习拓展编辑器

UNITY3D拓展编辑器 - InspectorEditor(属性编辑器)1

UnityEditor编辑器扩展开发之类似于Inspector面板_Script的GameObject写法

拓展编辑器_Context菜单

Unity编辑器拓展(MenuItem)

拓展编辑器_组件不可编辑