4.EditorGUI是什么

4.EditorGUI-EditorGUI是什么


4.1 知识点

GUILayout知识回顾 以及 EditorGUI编辑器窗口准备工作

知识回顾

GUILayout 是一个GUI自动布局的公共类。它的方法和GUI基本一模一样,都是用来绘制、响应各种UI控件的,只不过它在GUI的基础上加入了自动布局功能。我们无需过多的去关心UI控件的位置和大小。

GUILayoutOption 布局选项

  • 控件的固定宽高

    GUILayout.Width(300);
    GUILayout.Height(200);
    
  • 允许控件的最小宽高

    GUILayout.MinWidth(50);
    GUILayout.MinHeight(50);
    
  • 允许控件的最大宽高

    GUILayout.MaxWidth(100);
    GUILayout.MaxHeight(100);
    
  • 允许或禁止水平拓展

    GUILayout.ExpandWidth(true); //允许
    GUILayout.ExpandHeight(false); //禁止
    

准备工作

创建一个编辑器窗口

public class MyEditorGUILearnWindow : EditorWindow
{
    [MenuItem("编辑器拓展教程/MyEditorGUILearnWindow")]
    private static void OpenMyEditorGUILearnWindow()
    {
        MyEditorGUILearnWindow win = EditorWindow.GetWindow<MyEditorGUILearnWindow>("EditorGUI知识讲解窗口");
        win.Show();
    }

    private void OnGUI()
    {
        //窗口中的控件相关绘制 逻辑处理相关的内容
    }
}

EditorGUI是什么

EditorGUI 类似 GUI,是一个主要用于绘制编辑器拓展 UI 的工具类。它提供了一些 GUI 中没有的API,主要是编辑器功能中会用到的一些特殊控件。

EditorGUILayout 类似于 GUILayout,是一个带有自动布局功能的 EditorGUI 绘制工具类。

我们经常会将 EditorGUI 和 GUI 混合使用来制作一些编辑器拓展功能。但是由于更多时候我们会用到自动布局功能,因此我们接下来着重讲解 EditorGUILayout 中的功能。EditorGUI和它的区别仅仅是需要自己设置位置而已。

详细内容:EditorGUILayout官方文档


4.2 知识点代码

Lesson04_EditorGUI_EditorGUI是什么

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class Lesson04_EditorGUI_EditorGUI是什么 : MonoBehaviour
{
    void Start()
    {
        #region GUILayout知识回顾 以及 EditorGUI编辑器窗口准备工作

        //1.知识回顾
        //GUILayout 是一个GUI自动布局的公共类
        //它其中的方法和GUI基本一模一样,都是用来绘制、响应各种UI控件的
        //只不过它在GUI的基础上加入了自动布局功能
        //我们无需过多的去关心UI控件的位置和大小

        //GUILayoutOption 布局选项
        //控件的固定宽高
        //GUILayout.Width(300);
        //GUILayout.Height(200);
        //允许控件的最小宽高
        //GUILayout.MinWidth(50);
        //GUILayout.MinHeight(50);
        //允许控件的最大宽高
        //GUILayout.MaxWidth(100);
        //GUILayout.MaxHeight(100);
        //允许或禁止水平拓展
        //GUILayout.ExpandWidth(true);//允许
        //GUILayout.ExpandHeight(false);//禁止
        //GUILayout.ExpandHeight(true);//允许
        //GUILayout.ExpandHeight(false);//禁止

        //2.准备工作
        //创建一个编辑器窗口 

        #endregion

        #region 知识点 EditorGUI是什么?

        //EditorGUI 类似 GUI
        //是一个主要用于绘制编辑器拓展 UI 的工具类
        //它提供了一些 GUI 中没有的API
        //主要是 编辑器功能中会用到的一些 特殊控件

        //而EditorGUILayout 类似于 GUILayout
        //是一个带有自动布局功能的 EditorGUI 绘制工具类

        //我们经常会将 EditorGUI 和 GUI 混合使用 来制作一些编辑器拓展功能
        //但是由于更多时候我们会用到自动布局功能
        //因此我们接下来着重讲解 EditorGUILayout 中的功能
        //EditorGUI和它的区别仅仅是需要自己设置位置而已

        //详细内容:https://docs.unity.cn/cn/2022.3/ScriptReference/EditorGUILayout.html

        #endregion
    }
}

MyEditorGUILearnWindow

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class MyEditorGUILearnWindow : EditorWindow
{
    [MenuItem("编辑器拓展教程/MyEditorGUILearnWindow")]
    private static void OpenMyEditorGUILearnWindow()
    {
        MyEditorGUILearnWindow win = EditorWindow.GetWindow<MyEditorGUILearnWindow>("EditorGUI知识讲解窗口");
        //win.titleContent = new GUIContent("EditorGUI知识讲解窗口");
        win.Show();
    }
    
    private void OnGUI()
    {
        //窗口中的控件相关绘制 逻辑处理相关的内容
    }
}

4.3 练习题

请简述,GUI、GUILayout,EditorGUI、EditorGUILayout彼此之间的关系。

GUI 和 GUILayout:

  • GUI 和 GUILayout 是用于绘制用户界面元素的类。它们都提供了一系列的静态方法,用于创建按钮、标签、文本框等UI元素。
  • GUI 类提供了一种基于坐标的绘制方法,允许你指定元素的位置和大小。
  • GUILayout 类则使用基于布局的方法,允许你创建自适应的UI元素,其位置和大小会根据屏幕大小和其他元素的变化而自动调整。

EditorGUI 和 EditorGUILayout:

  • EditorGUI 和 EditorGUILayout 是专门用于在Unity编辑器中创建自定义编辑器界面的类。
  • EditorGUI 提供了一组方法,允许你在编辑器中创建自定义的UI元素,例如字段、标签等。它提供了更高级的控制,适用于需要更灵活布局和样式的情况。
  • EditorGUILayout 则提供了一组适用于编辑器界面的方法。它简化了创建编辑器窗口的过程,使得在编辑器中布局UI变得更加容易。

可以认为 EditorGUI 提供了相对 GUI 更多的控件绘制API,专门提供于编辑器拓展使用,我们一般会将他们配合使用来进行编辑器拓展开发,而后面加了Layout的两个公共类只是多了自动布局功能。



转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏