Unity 编辑器篇|(五)编辑器拓展GUILayout类 (全面总结 | 建议收藏)

目录

  • 1. 前言
  • 2. 参数
  • 3. 功能
    • 3.1 按钮:Button、RepeatButton
    • 3.2 文本:Label、TextArea、TextField、PasswordField
    • 3.3 工具栏:Toolbar
    • 3.4 切换框:Toggle
    • 3.5 滚动条:HorizontalScroll 、VerticalScroll
    • 3.6 滑条:HorizontalSlider、VerticalSlider
    • 3.7 自动布局框:Box
    • 3.8 布局:BeginHorizontal、EndHorizontal、BeginVertical、EndVertical
    • 3.9 滑动布局:ScrollView
    • 3.10 空白间隔:Space
    • 3.11 浮动窗口:Window
    • 3.12 GUILayoutOption
  • 4. 其他

1. 前言

  • GUILayout 类是 Unity GUI 的接口,并且具有自动布局功能。使用 IMGUI 系统时,可使用两种不同的模式来排列和组织 UI:固定布局模式和自动布局模式。不必使用一种布局模式来替代另一种布局模式,可在同一OnGUI()函数中同时使用这两种模式。
  • 当有预先设计好的界面可供使用时,采用固定布局比较合理。如果预先不知道需要多少元素,或者不想费心进行每个控件的手动定位,则采用自动布局比较合适。例如,如果要基于保存游戏文件创建大量不同的按钮,但无法准确知道要绘制多少按钮,这种情况下采用自动布局可能会更加合理。具体实际上取决于游戏设计以及所需的界面呈现方式。
  • 使用自动布局时有两个主要的不同之处:
    • 使用 GUILayout 而不是 GUI
    • 自动布局控件不需要 Rect() 函数

2. 参数

静态函数描述
BeginArea在一个固定的屏幕区域中开始 GUI 控件的 GUILayout 块。
BeginHorizontal开始一个水平控件组。
BeginScrollView开始一个自动布局的滚动视图。
BeginVertical开始一个垂直控件组。
Box创建一个自动布局框。
Button创建一个单击按钮。
EndArea闭合以 BeginArea 开始的 GUILayout 块。
EndHorizontal闭合以 BeginHorizontal 开始的组。
EndScrollView结束通过 BeginScrollView 调用开始的滚动视图。
EndVertical闭合以 BeginVertical 开始的组。
ExpandHeight传递给控件以允许或禁止垂直扩展的选项。
ExpandWidth传递给控件以允许或禁止水平扩展的选项。
FlexibleSpace插入灵活的空白元素。
Height传递给控件以使其具有绝对高度的选项。
HorizontalScrollbar创建一个水平滚动条。
HorizontalSlider用户可以拖动的水平滑动条,用于在最小值和最大值之间更改某值。
Label创建一个自动布局标签。
MaxHeight传递给控件以指定最大高度的选项。
MaxWidth传递给控件以指定最大宽度的选项。
MinHeight传递给控件以指定最小高度的选项。
MinWidth传递给控件以指定最小宽度的选项。
PasswordField创建一个可让用户输入密码的文本字段。
RepeatButton创建一个重复按钮。只要用户按住鼠标,该按钮就返回 true。
SelectionGrid创建一个选择网格。
Space在当前布局组中插入空白元素。
TextArea创建一个可供用户编辑字符串的多行文本字段。
TextField创建一个可供用户编辑字符串的单行文本字段。
Toggle创建一个打开/关闭的开关按钮。
Toolbar创建一个工具栏。
VerticalScrollbar创建一个垂直滚动条。
VerticalSlider用户可以拖动的垂直滑动条,用于在最小值和最大值之间更改某值。
Width传递给控件以使其具有绝对宽度的选项。
Window创建一个对自身内容进行自动布局的弹出窗口。

3. 功能

3.1 按钮:Button、RepeatButton

  • Button:创建一个单击按钮,有不少重载参数:
    • text:按钮上显示的文本。
    • image:要在按钮上显示的纹理。
    • content:该按钮的文本、图像和工具提示,是GUIContent类。
    • style:要使用的样式,默认是当前在用的样式。
    • options:一个布局选项列表,用于指定额外的布局属性,此处传递的值会覆盖style,本质是包含枚举的类。
  • RepeatButton:创建一个重复按钮。只要用户按住鼠标,该按钮就返回 true,参数与Button类似。
using UnityEngine;

public class GUILayoutExample : MonoBehaviour
{

    void OnGUI()
    {
        if (GUILayout.Button(" Button"))
        {
            Debug.Log("Clicked Button");
        }

        if (GUILayout.RepeatButton(" RepeatButton"))
        {
            Debug.Log("Clicked RepeatButton");
        }
    }
}

1

3.2 文本:Label、TextArea、TextField、PasswordField

  • Label:创建一个自动布局标签。
  • TextArea:创建一个可供用户编辑字符串的多行文本字段。
  • TextField:创建一个可供用户编辑字符串的单行文本字段。
  • PasswordField :创建一个可让用户输入密码的文本字段。
using UnityEngine;

public class GUILayoutExample : MonoBehaviour
{
    public Texture2D textureToDisplay;
    public string fieldToEdit = "Hello World";
    public string areaToEdit = "Hello World\nI've got 2 lines...";
    public string passwordToEdit = "My Password";
    void OnGUI()
    {
        //Label
        GUILayout.Label("Hello World!");
        GUILayout.Label(textureToDisplay);

        //TextField
        fieldToEdit = GUILayout.TextField(fieldToEdit, 25);

        //TextArea
        areaToEdit = GUILayout.TextArea(areaToEdit, 200);

        //PasswordField
        passwordToEdit = GUILayout.PasswordField( passwordToEdit, "*"[0], 25);
    }
}

2

3.3 工具栏:Toolbar

  • Toolbar:创建一个工具栏。
using UnityEngine;

public class GUILayoutExample : MonoBehaviour
{
    int toolbarInt = 0;
    string[] toolbarStrings = { "Toolbar1", "Toolbar2", "Toolbar3" };

    void OnGUI()
    {
        toolbarInt = GUILayout.Toolbar(toolbarInt, toolbarStrings);
    }
}

2

3.4 切换框:Toggle

  • Toggle:创建一个打开/关闭的开关按钮。
using UnityEngine;

public class GUILayoutExample : MonoBehaviour
{
    bool toggleTxt = false;

    void OnGUI()
    {
        toggleTxt = GUILayout.Toggle(toggleTxt, "A Toggle text");
    }
}

3

3.5 滚动条:HorizontalScroll 、VerticalScroll

  • HorizontalScroll :创建一个水平滚动条。
  • VerticalScroll:创建一个垂直滚动条。
using UnityEngine;

public class GUILayoutExample : MonoBehaviour
{
    float vSbarValue;
    float hSbarValue;

    void OnGUI()
    {
        vSbarValue = GUILayout.VerticalScrollbar(vSbarValue, 1.0f, 10.0f, 0.0f);
        hSbarValue = GUILayout.HorizontalScrollbar(hSbarValue, 1.0f, 0.0f, 10.0f);
        GUILayout.Label("This is a text that makes space");
    }
}

4

3.6 滑条:HorizontalSlider、VerticalSlider

  • HorizontalSlider :用户可以拖动的水平滑动条,用于在最小值和最大值之间更改某值。
  • VerticalSlider:用户可以拖动的垂直滑动条,用于在最小值和最大值之间更改某值。
using UnityEngine;

public class GUILayoutExample : MonoBehaviour
{
    float vSliderValue = 0.0f;
    float hSliderValue = 0.0f;

    void OnGUI()
    {
        vSliderValue = GUILayout.VerticalSlider(vSliderValue, 10.0f, 0.0f);
        hSliderValue = GUILayout.HorizontalSlider(hSliderValue, 0.0f, 10.0f);
        GUILayout.Label("This is a text that makes space");
    }
}

5

3.7 自动布局框:Box

  • Box :创建一个自动布局框。
using UnityEngine;

public class GUILayoutExample : MonoBehaviour
{
    Texture tex;
    void OnGUI()
    {
        if (!tex)
        {
            Debug.LogError("Missing texture, assign a texture in the inspector");
        }
        GUILayout.Box(tex);
        GUILayout.Box("This is a sized label");
    }
}

6

3.8 布局:BeginHorizontal、EndHorizontal、BeginVertical、EndVertical

  • BeginHorizontal:开始一个水平控件组。
  • EndHorizontal:闭合以 BeginHorizontal 开始的组。
  • BeginVertical:开始一个垂直控件组。
  • EndVertical:闭合以 BeginVertical 开始的组。
using UnityEngine;

public class GUILayoutExample : MonoBehaviour
{
    void OnGUI()
    {
        GUILayout.BeginHorizontal();
        GUILayout.Button("水平按钮1");
        GUILayout.Button("水平按钮2");
        GUILayout.EndHorizontal();

        GUILayout.BeginVertical();
        GUILayout.Button("垂直按钮1");
        GUILayout.Button("垂直按钮2");
        GUILayout.EndVertical();
    }
}

6

3.9 滑动布局:ScrollView

  • ScrollView方法也分为BeginScrollView和EndScrollView,他需要传入至少一个参数Vector2来记录自己滑动到什么地方了。和其他方法不一样的是,如果不给他加限制条件,他会把全部内容物大小计算出来然后拓展面板长度,也就是没有滑动效果。所以我们需要用一些方法来限制他。
using UnityEngine;

public class GUILayoutExample : MonoBehaviour
{
    private Vector2 scrollViewRoot;
    void OnGUI()
    {
        //如果不加以限制,会导致面板强制拉伸300长度,按钮全部放出来
        scrollViewRoot = GUILayout.BeginScrollView(scrollViewRoot, GUILayout.Width(200), GUILayout.Height(200));
        GUILayout.Button("1", GUILayout.Height(100));
        GUILayout.Button("2", GUILayout.Height(100));
        GUILayout.Button("3", GUILayout.Height(100));
        GUILayout.EndScrollView();
    }
}

7

3.10 空白间隔:Space

  • Space方法在当前布局组中插入空白元素,非常简单,没有任何重载构造函数,只需要传入空白长度就能用了。
    因为太简单了就不演示了,一般它是拿来美观或者搭配Area使用的。当然,如果它在水平的元素中,自身也会变成水平的空白块。

3.11 浮动窗口:Window

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

public class GUILayoutExample : MonoBehaviour
{
    Rect windowRect = new Rect(20, 20, 120, 50);

    void OnGUI()
    {
        windowRect = GUILayout.Window(0, windowRect, DoMyWindow, "My Window");
    }

    void DoMyWindow(int windowID)
    {
        if (GUILayout.Button("Hello World"))
        {
            print("Got a click");
        }
    }
}

8

3.12 GUILayoutOption

  • GUILayoutOption是绝大部分GUILayout方法的可选参数,他的主要作用就是控制GUI的样式。
  • 有以下这些方法会返回GUILayoutOption:
GUILayout.Width(float width) // 传递给控件以使其具有绝对宽度的选项
GUILayout.Height(float height) // 传递给控件以使其具有绝对高度的选项
GUILayout.MinWidth(float width) // 传递给控件以指定最小宽度的选项
GUILayout.MinHeight(float height) // 传递给控件以指定最小高度的选项
GUILayout.MaxWidth(float width)// 传递给控件以指定最大宽度的选项
GUILayout.MaxHeight(float width) // 传递给控件以指定最大高度的选项
GUILayout.ExpandHeight(bool expand) // 传递给控件以允许或禁止垂直扩展的选项
GUILayout.ExpandWidth(bool expand) // 传递给控件以允许或禁止水平扩展的选项

4. 其他

以上主要就是进行OnGUI的使用,实际上,GUILayout类还能用于Editor方法。Editor类与GUILayout类进行编辑器拓展,列如:

using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(GUILayoutExample))]
public class GUILayoutEditor : Editor
{
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        GUILayoutExample tar = target as GUILayoutExample;
        if (GUILayout.Button("开始调试"))
        {
            tar.TestFunc();
        }
    }
}

10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/322463.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

优思学院|质量管理五大工具和七大手法要点总结|2024

在现代企业管理中,质量管理是核心竞争力的重要组成部分。它不仅关系到产品的品质,更直接影响到企业的市场信誉和经济效益。本文将深入探讨质量管理中的五大工具及七大手法,这些工具和手法都贯穿了六西格玛DMAIC五步的方法论之中,是…

MYSQL第三次作业--单表查询

第三次作业 一、创建worker表 mysql> create table worker(-> 部门号 int(11) not null,-> 职工号 int(11) not null,-> 工作时间 date not null,-> 工资 float(8,2) not null,-> 政治面貌 varchar(10) not null default群众,-> 姓名 varchar(20) not n…

arrow,一个神奇的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个神奇的 Python 库 - arrow。 Github地址:https://github.com/arrow-py/arrow 日期和时间处理是许多应用程序中的常见任务,但在 Python 中&#xf…

聚类算法之Kmeans聚类详解

聚类算法是无监督学习算法,它根据样本之间的相似性,将样本划分到不同的类别中;不同的相似度计算方法,会得到不同的聚类结果,常用的相似度计算方法有欧氏距离法。聚类算法的目的是在没有先验知识的情况下,自…

亚马逊卖家必备神器:鲲鹏系统助力产品排名飙升

亚马逊鲲鹏系统是一款功能强大的工具,为亚马逊卖家提供了多种实用功能,旨在提高产品排名、增加自然流量,并模拟真实的人类操作,以规避亚马逊的检测系统。 下面是亚马逊鲲鹏系统的主要功能和8大特点: 主要功能&#xf…

MATLAB对话框与菜单设计实验

本文MATLAB源码,下载后直接打开运行即可[点击跳转下载]-附实验报告https://download.csdn.net/download/Coin_Collecter/88740733 一、实验目的 1.掌握建立控件对象的方法。 2.掌握对话框设计方法。 3.掌握菜单设计方法。 二、实验内容 建立如下图所示的菜单。菜单…

(2023版)斯坦福CS231n学习笔记:DL与CV教程 (2) | 图像分类与损失函数

前言 📚 笔记专栏:斯坦福CS231N:面向视觉识别的卷积神经网络(23)🔗 课程链接:https://www.bilibili.com/video/BV1xV411R7i5💻 CS231n: 深度学习计算机视觉(2017&#xf…

从第一性原理看大模型Agent技术

本文由下面的内部分享视频文字稿重新整理而成 从第一性原理看大模型Agent技术 引 一个乐观主义者的悲观估计 随着大规模模型技术的兴起,我们正处于一个崭新的智能时代的黎明。我们有一个大胆的预测,未来的5到10年将可能带来一场大变局:99%的…

Java异常:toString()和getMessage()区别

首先写了两个错误 Controller public class DemoController {RequestMapping("/show1")public String showInfo(){String str null;str.length();return "index";}RequestMapping("/show2")public String showInfo2(){int a 10/0;return &quo…

java多线程(并发)夯实之路-synchronized锁升级深入浅出

轻量级锁 使用场景:一个对象有多线程访问,但时间是错开的(如果多线程同时访问,也就是有竞争的,会升级为重量级锁) 轻量级锁对使用者是透明的,语法仍是synchronized 例: 以上的代码…

天津Java开发培训哪家好?选Java培训班要考虑

在当今社会,Java语言在软件开发领域具有举足轻重的地位,Java是一门面向对象编程语言,Java语言集合了C的优点,丢弃了缺点,所以Java语言表现的功能强大而简单易用,已经得到越来越多的应届毕业生和职场新人的认…

智慧公厕创造智能、整洁、舒适环境,让“方便”更方便

在现代城市建设中,智慧公厕已成为一项热点技术。通过物联感知、云管理数据处理和人性化智能设备的融合,智慧公厕让我们的“方便”变得更加方便。不仅实时感知和监控公共厕所的情况,还提升管理效率,为市民提供更人性化的服务。智慧…

Authing 入选中国信通院《 2023 高质量数字化转型产品及服务全景图》

近日,中国信通院“铸基计划”发布了《高质量数字化转型产品及服务全景图( 2023 )》。Authing 身份云成功入选 IT 维护与运营领域并获得证书。 “十四五”时期,我国数字经济转向深化应用、规范发展、普惠共享的新阶段,数字化转型已成为传统企业…

STM32——电容触摸按键充电时间测量实验

1电容触摸按键 无手指触摸:上电时,电阻作用下,电容Cs进行充电,直到电容充满,这时候会有一个充电时间Tcs。 有手指触摸:上电时,电阻作用下,电容Cs和Cx进行充电,电容充满时…

2719. 统计整数数目

给你两个数字字符串 num1 和 num2 &#xff0c;以及两个整数 max_sum 和 min_sum 。如果一个整数 x 满足以下条件&#xff0c;我们称它是一个好整数&#xff1a; num1 < x < num2min_sum < digit_sum(x) < max_sum. 请你返回好整数的数目。答案可能很大&#xff…

jquery(一)

目录 &#x1f338;基本使用 &#x1f341;两大特性 &#x1f338;操作文档 &#x1f338;样式操作 &#x1f338;属性操作 &#x1f338;文档操作 &#x1f341;内部追加 &#x1f340;原来界面 &#x1f340;追加后界面 &#x1f341;外部追加 &#x1f340;原来界…

进阶Docker2:数据卷和挂载目录

目录 准备 删除容器 创建并运行一个容器 数据卷&#xff08;Volumes&#xff09; 挂载数据卷 虚拟机端口映射 挂载目录&#xff08;Bind mounts&#xff09; 挂载目录 挂载文件 部署在线项目 docker 在容器中管理数据主要有两种方式&#xff1a; - 数据卷&#xff0…

陪诊小程序开发|陪诊软件定制|陪诊系统成品功能包含哪些?

陪诊小程序是一种便捷的工具&#xff0c;为用户提供一系列服务和功能&#xff0c;方便患者在就医过程中获得更好的体验和效果。接下来我们将介绍几个主要的陪诊小程序功能。 陪诊小程序开发功能&#xff1a; 一、预约挂号功能。陪诊小程序能够连接用户和医疗机构的系统&#x…

ART-Adversarial Robustness Toolbox检测AI模型及对抗攻击的工具

一、工具简介 Adversarial Robustness Toolbox 是 IBM 研究团队开源的用于检测模型及对抗攻击的工具箱&#xff0c;为开发人员加强 AI模型被误导的防御性&#xff0c;让 AI 系统变得更加安全&#xff0c;ART支持所有流行的机器学习框架 &#xff08;TensorFlow&#xff0c;Ker…

什么是JAVA的包装类?用了有什么好处?

目录 一、包装类概述 二、包装类和基本数据类型的转换 三、使用包装类的ValueOf方法 四、基本类型和包装类的自动转换 一、包装类概述 Java的包装类是为了方便操作基本数据类型而提供的类。Java的基本数据类型&#xff08;如int、char、boolean等&#xff09;是非对象的&a…