欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Unity Editor 编辑器拓展 04——IMGUI的学习

程序员文章站 2022-07-08 18:21:51
IMGUI是可以在运行时绘制的UI系统。因为全部都是代码搭建的UI,所以并没有UGUI适合游戏中显示,主要用于工作人员调试用。因为GUI和GUILayout可以用来绘制Editor界面,所以在Unity编辑器拓展里面开一专题进行IMGUI的讲解。GUI和GUILayout的区别就不详述了。GUILayout是带有自动布局功能GUI。如果想更加*的定制UI界面的话,当然是使用GUI类。以01章的窗口为背景先分析一下GUILayout.Button的重载函数可以看到,有6个重载,....

IMGUI是可以在运行时绘制的UI系统。因为全部都是代码搭建的UI,所以并没有UGUI适合游戏中显示,主要用于工作人员调试用。

因为GUI和GUILayout可以用来绘制Editor界面,所以在Unity编辑器拓展里面开一专题进行IMGUI的讲解。

GUI和GUILayout的区别就不详述了。GUILayout是带有自动布局功能GUI。如果想更加*的定制UI界面的话,当然是使用GUI类。

 

以01章的窗口为背景

先分析一下GUILayout.Button的重载函数

Unity Editor 编辑器拓展 04——IMGUI的学习

可以看到,有6个重载,这些参数的作用不外乎是定制Button的外观。

string参数就是显示Button显示的文字,Texture就是显示Button的材质。

GUIContent是一个类,通过给这个类里面的string text, Texture image, string tooltip 三个字段赋值也可以定制Button。

GUILayoutOption在第二章讲过。

GUIStyle也是一个类,可以创建一个新对象,然后设定参数,做到定制Button的作用。

例1

public class MyWindow : EditorWindow
{
    string myString = "Hello World";
    bool groupEnabled;
    bool myBool = true;
    float myFloat = 1.23f;
    Texture tex;

    //窗口需要一个打开的方式
    //MenuItem属性会在编辑器菜单上创建对应的选项
    //点击选项即可创建窗口
    [MenuItem("Window/My Window")]
    public static void ShowWindow()
    {
        //调用EditorWindow的静态函数GetWindow
        //创建对应的窗口
        //ps:该函数有多个重载
        EditorWindow.GetWindow(typeof(MyWindow));
    }

    private void OnGUI()
    {
        //窗口绘制的实际代码在这里
        tex = EditorGUILayout.ObjectField("texture",tex, typeof(Texture)) as Texture;
        GUILayout.Button(new GUIContent("BUTTON名字", tex, "这是tooltip"));
    }
}

Unity Editor 编辑器拓展 04——IMGUI的学习

例2

private void OnGUI()
    {
        //窗口绘制的实际代码在这里
        //tex = EditorGUILayout.ObjectField("texture",tex, typeof(Texture)) as Texture;
        //GUILayout.Button(new GUIContent("BUTTON名字", tex, "这是tooltip"));

        GUILayout.Button("长、宽最大100", GUILayout.MaxHeight(100), GUILayout.MaxWidth(100));
        GUILayout.Button("长、宽定长150", GUILayout.Height(150), GUILayout.Width(150));

    }

Unity Editor 编辑器拓展 04——IMGUI的学习

例3

    private void OnGUI()
    {
        //通过在GUISkin中获取button的默认GUIStyle
        GUIStyle style = GUI.skin.button;
        //下面开始修改
        style.fontStyle = FontStyle.Italic;//文字是斜体
        style.fontSize = 20;//文字大小20
        style.richText = true; //文字是否支持富文本

        GUILayout.Button("<color=red>我是红色的按钮</color>", style,GUILayout.Width(180));
    }

Unity Editor 编辑器拓展 04——IMGUI的学习

 

例3中涉及到style的概念是挺复杂的。

Unity编辑器中有一个默认的皮肤预设,这个预设里面对于button、toggle、textField等等控件的样子都进行的设定。

皮肤预设(GUI Skin)可以在Project窗口里面创建出来。里面包含对如下控件样子的设定。GUISkin 是可应用于 GUI 的 GUIStyle 的集合。皮肤 (Skin) 的主要目的将样式应用于整个 UI,而不是应用于单独的控件本身。

Unity Editor 编辑器拓展 04——IMGUI的学习

 

要使用自定义的GUISkin,只需要创建一个GUISkin字段,然后将自定义的GUISkin文件拖入。

最后设置GUI.Skin = MyCustomSkin就OK。

 

经过上面的学习,对于IMGUI所有控件的参数肯定不会迷惑了。接下来只需要知道每个控件的作用就OK。

 

GUILayout

控件列表

Button 按钮

Label 创建一个自动布局标签。

Space 在当前布局组中插入空白元素。

TextArea 创建一个可供用户编辑字符串的多行文本字段。

TextField 创建一个可供用户编辑字符串的单行文本字段。

Toggle 创建一个打开/关闭的开关按钮。

Toolbar 创建一个工具栏。

VerticalScrollbar 创建一个垂直滚动条。

VerticalSlider 用户可以拖动的垂直滑动条,用于在最小值和最大值之间更改某值。

Window 创建一个对自身内容进行自动布局的弹出窗口。

PasswordField 创建一个可让用户输入密码的文本字段。

RepeatButton 创建一个重复按钮。只要用户按住鼠标,该按钮就返回 true。松开就返回false

SelectionGrid 创建一个选择网格。

Space 在当前布局组中插入空白元素。

FlexibleSpace 插入灵活的空白元素。

Box 创建一个自动布局框。

HorizontalScrollbar 创建一个水平滚动条。

HorizontalSlider 用户可以拖动的水平滑动条,用于在最小值和最大值之间更改某值。

GUILayouOption

Width   Height   MinWidth   MinHeight   MaxWidth   MaxHeight   ExpandWidth   ExpandHeight  

基本每个控件方法都有一个可选参数是GUILayoutOption[] Options。比如GUILayout.Width返回的就是GUILayoutOption对象。

 

分组控件

BeginArea 在一个固定的屏幕区域中开始 GUI 控件的 GUILayout 块。

BeginHorizontal 开始一个水平控件组。

BeginScrollView 开始一个自动布局的滚动视图。

BeginVertical 开始一个垂直控件组。 EndArea.... 结束..    

本文地址:https://blog.****.net/qq_14812585/article/details/107892472

相关标签: Unity