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

目录

  • 1. 前言
  • 2. 参数
    • 2.1 静态变量
    • 2.2 静态函数
    • 2.3 委托
  • 3. 功能
    • 3.1 按钮:Button、RepeatButton
    • 3.2 文本:Label 、TextField 、TextArea 、PasswordField
    • 3.3 滑动条:HorizontalScrollbar 、VerticalScrollbar
    • 3.4 滑条:VerticalSlider 、HorizontalSlider
    • 3.5 切换框:Toggle
    • 3.6 工具栏:Toolbar
    • 3.7 自动布局框:Box
    • 3.8 按钮网格:SelectionGrid
    • 3.9 窗口:Window 、ModalWindow
    • 3.10 绘制纹理:DrawTexture

1. 前言

  • GUI 类是 Unity GUI 的接口,并且具有手动定位功能。
  • “即时模式”GUI 系统(也称为 IMGUI)是一个完全独立的功能系统,不同于 Unity 基于游戏对象的主 UI 系统。IMGUI 是一个代码驱动的 GUI 系统,主要用作程序员的工具。为了驱动该系统,需在实现脚本上调用 OnGUI 函数
  • 即时模式 GUI 系统常用于:
    • 创建游戏内调试显示和工具。
    • 为脚本组件创建自定义检视面板。
    • 创建新的编辑器窗口和工具以扩展 Unity 本身。

2. 参数

2.1 静态变量

属性描述
backgroundColor用于 GUI 渲染的所有背景元素的全局着色颜色。
changed如果任何控件更改了输入数据的值,则返回 true。
colorGUI 的全局着色颜色。
contentColor为 GUI 渲染的所有文本着色。
depth当前正在执行的 GUI 行为的排序深度。
enabled是否启用了 GUI?
matrixGUI 变换矩阵。
skin要使用的全局皮肤。
tooltip鼠标指针当前悬停在其上或具有键盘焦点的控件的工具提示。(只读)

2.2 静态函数

属性描述
BeginGroup开始一个组。必须与 EndGroup 调用配对使用。
BeginScrollView在 GUI 内开始一个滚动视图。
Box在 GUI 层上创建一个框。
BringWindowToBack将特定窗口放置到该浮动窗口的后方。
BringWindowToFront将特定窗口放置到该浮动窗口的前方。
Button创建一个单击按钮。当用户点击该按钮时,立即执行一些操作。
DragWindow使窗口可被拖动。
DrawTexture在一个矩形内绘制纹理。
DrawTextureWithTexCoords使用给定的纹理坐标在矩形内绘制纹理。
EndGroup结束组。
EndScrollView结束使用 BeginScrollView 调用开始的滚动视图。
FocusControl将键盘焦点移动到某个命名控件。
FocusWindow使某个窗口成为激活窗口。
GetNameOfFocusedControl获取具有焦点的命名控件的名称。
HorizontalScrollbar创建一个水平滚动条。滚动条是用于滚动文档的控件。大多数情况下,您需要的可能是滚动视图。
HorizontalSlider用户可以拖动的水平滑动条,用于在最小值和最大值之间更改某值。
Label在屏幕上创建一个文本或纹理标签。
ModalWindow显示一个模态窗口。
PasswordField创建一个可让用户输入密码的文本字段。
RepeatButton创建一个只要用户按住就一直处于激活状态的按钮。
ScrollTo滚动包含的所有滚动视图,让它们尝试使 position 可见。
SelectionGrid创建一个按钮网格。
SetNextControlName设置下一个控件的名称。
TextArea创建一个可供用户编辑字符串的多行文本区域。
TextField创建一个可供用户编辑字符串的单行文本字段。
Toggle创建一个打开/关闭的开关按钮。
Toolbar创建一个工具栏。
UnfocusWindow从所有窗口移除焦点。
VerticalScrollbar创建一个垂直滚动条。滚动条是用于滚动文档的控件。大多数情况下,您需要的可能是滚动视图。
VerticalSlider用户可以拖动的垂直滑动条,用于在最小值和最大值之间更改某值。
Window创建一个弹出窗口。

2.3 委托

属性描述
WindowFunction开在窗口中绘制 GUI 的回调(与 GUI.Window 配合使用)。

3. 功能

3.1 按钮:Button、RepeatButton

  • Button:点击该按钮时,立即执行一些操作。
  • RepeatButton:用户按住就一直处于激活状态。
using UnityEngine;public class GUIExample : MonoBehaviour
{void OnGUI(){if (GUI.Button(new Rect(10, 70, 50, 30), "Button")){Debug.Log("Button");}if (GUI.RepeatButton(new Rect(80, 70, 100, 30), "RepeatButton")){Debug.Log("RepeatButton");}}
}

1

3.2 文本:Label 、TextField 、TextArea 、PasswordField

  • Label:在屏幕上创建一个文本或纹理标签。
  • TextField:创建一个可供用户编辑字符串的单行文本字段。
  • TextArea:创建一个可供用户编辑字符串的多行文本区域。
  • PasswordField:创建一个可让用户输入密码的文本字段。
using UnityEngine;public class GUIExample : 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(){//LabelGUI.Label(new Rect(10, 10, 100, 20), "Hello World!");GUI.Label(new Rect(140, 10, textureToDisplay.width, textureToDisplay.height), textureToDisplay);//TextFieldfieldToEdit = GUI.TextField(new Rect(10, 80, 200, 20), fieldToEdit, 25);//TextAreaareaToEdit = GUI.TextArea(new Rect(10, 120, 200, 100), areaToEdit, 200);//PasswordFieldpasswordToEdit = GUI.PasswordField(new Rect(10, 250, 200, 20), passwordToEdit, "*"[0], 25);}
}

2

3.3 滑动条:HorizontalScrollbar 、VerticalScrollbar

  • HorizontalScrollbar :创建一个水平滚动条。滚动条是用于滚动文档的控件。大多数情况下,您需要的可能是滚动视图。
  • VerticalScrollbar:创建一个垂直滚动条。滚动条是用于滚动文档的控件。大多数情况下,您需要的可能是滚动视图。
using UnityEngine;public class GUIExample : MonoBehaviour
{public float hSbarValue;public float vSbarValue;void OnGUI(){hSbarValue = GUI.HorizontalScrollbar(new Rect(50, 25, 100, 30), hSbarValue, 1.0F, 0.0F, 10.0F);vSbarValue = GUI.VerticalScrollbar(new Rect(25, 25, 30, 100), vSbarValue, 1.0F, 10.0F, 0.0F);}
}

在这里插入图片描述

3.4 滑条:VerticalSlider 、HorizontalSlider

  • VerticalSlider:用户可以拖动的垂直滑动条,用于在最小值和最大值之间更改某值。
  • HorizontalSlider :用户可以拖动的水平滑动条,用于在最小值和最大值之间更改某值。
using UnityEngine;public class GUIExample : MonoBehaviour
{public float hSliderValue = 0.0F;public float vSliderValue = 0.0f;void OnGUI(){hSliderValue = GUI.HorizontalSlider(new Rect(50, 25, 100, 30), hSliderValue, 0.0F, 10.0F);vSliderValue = GUI.VerticalSlider(new Rect(25, 25, 30, 100), vSliderValue, 10.0f, 0.0f);}
}

6

3.5 切换框:Toggle

  • Toggle:创建一个打开/关闭的开关按钮。
using UnityEngine;public class GUIExample : MonoBehaviour
{public Texture aTexture;private bool toggleTxt = false;private bool toggleImg = false;void OnGUI(){toggleTxt = GUI.Toggle(new Rect(10, 10, 100, 30), toggleTxt, "A Toggle text");toggleImg = GUI.Toggle(new Rect(10, 50, 50, 50), toggleImg, aTexture);}
}

6

3.6 工具栏:Toolbar

  • Toolbar:创建一个工具栏。
using UnityEngine;public class GUIExample : MonoBehaviour
{public int toolbarInt = 0;public string[] toolbarStrings = new string[] { "Toolbar1", "Toolbar2", "Toolbar3" };void OnGUI(){toolbarInt = GUI.Toolbar(new Rect(25, 25, 250, 30), toolbarInt, toolbarStrings);}
}

7

3.7 自动布局框:Box

  • Box:在 GUI 层上创建一个框。
using UnityEngine;public class GUIExample : MonoBehaviour
{void OnGUI(){GUI.Box(new Rect(0, 0, Screen.width, Screen.height), "This is a box");}
}

8

3.8 按钮网格:SelectionGrid

  • SelectionGrid:创建一个按钮网格。
using UnityEngine;public class GUIExample : MonoBehaviour
{public int selGridInt = 0;public string[] selStrings = new string[] { "Grid 1", "Grid 2", "Grid 3", "Grid 4" };void OnGUI(){selGridInt = GUI.SelectionGrid(new Rect(50, 40, 100, 50), selGridInt, selStrings, 2);}
}

9

3.9 窗口:Window 、ModalWindow

  • Window :创建一个弹出窗口。
  • ModalWindow:模态窗口与 Window 类似,但它将始终位于所有其他 GUI 的上方,并且在显示期间,保证是所有 GUI 输入和事件的唯一接收者。显示 ModalWindow 期间,其他控件将不处理输入。注意,一次只能显示一个 ModalWindow。
using UnityEngine;public class GUIExample : MonoBehaviour
{public Rect windowRect = new Rect(20, 20, 120, 50);public Rect modalWindowRect = new Rect(150, 20, 120, 50);void OnGUI(){windowRect = GUI.Window(0, windowRect, DoMyWindow, "My Window");modalWindowRect = GUI.ModalWindow(1, modalWindowRect, DoMyWindow, "My ModalWindow");}void DoMyWindow(int windowID){if (GUI.Button(new Rect(10, 20, 100, 20), "Hello World")){print("Got a click");}}
}

10

3.10 绘制纹理:DrawTexture

  • DrawTexture:在一个矩形内绘制纹理。
属性描述
position要在其中绘制纹理的屏幕矩形。
image要显示的 Texture。
scaleMode当图像的宽高比不适合要绘制的宽高比时,如何缩放图像。
alphaBlend绘制图像时是否应用 Alpha 混合(默认启用)。
imageAspect用于源图像的宽高比。如果为 0(默认值),则使用图像的宽高比。传入 w/h 来指定所需的宽高比。这让您能够在不改变像素宽度和高度的情况下调整源图像的宽高比。
using UnityEngine;public class GUIExample : MonoBehaviour
{public Texture aTexture;void OnGUI(){if (!aTexture){return;}GUI.DrawTexture(new Rect(10, 10, 60, 60), aTexture, ScaleMode.StretchToFill, true, 10.0F);}
}

11

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM基础(12)——G1调优

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

pytorch学习笔记(十)

一、损失函数 举个例子 比如说根据Loss提供的信息知道,解答题太弱了,需要多训练训练这个模块。 Loss作用:1.算实际输出和目标之间的差距 2.为我们更新输出提供一定的依据(反向传播) 看官方文档 每个输入输出相减取…

Handsfree_ros_imu:ROS机器人IMU模块的get_imu_rpy.py文件学习记录

上一篇博客写了关于Handsfree_ros_imu:ROS机器人IMU模块ARHS姿态传感器(A9)Liunx系统Ubuntu20.04学习启动和运行教程: https://blog.csdn.net/qq_54900679/article/details/135539176?spm1001.2014.3001.5502 这次带来get_imu_r…

C++I/O流——(2)预定义格式的输入/输出(第一节)

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 含泪播种的人一定能含笑收获&#xff…

【python】08.面向对象编程基础

面向对象编程基础 活在当下的程序员应该都听过"面向对象编程"一词,也经常有人问能不能用一句话解释下什么是"面向对象编程",我们先来看看比较正式的说法。 "把一组数据结构和处理它们的方法组成对象(object&#…

.【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)

概率图模型是一种用图形表示概率分布和条件依赖关系的数学模型。概率图模型可以分为两大类:有向图模型和无向图模型。有向图模型也叫贝叶斯网络,它用有向无环图表示变量之间的因果关系。无向图模型也叫马尔可夫网络,它用无向图表示变量之间的…

Java 面试题 - 多线程并发篇

线程基础 创建线程有几种方式 继承Thread类 可以创建一个继承自Thread类的子类,并重写其run()方法来定义线程的行为。然后可以通过创建该子类的实例来启动线程。 示例代码: class MyThread extends Thread {public void run() {// 定义线程的行为} …

【python】09.面向对象进阶

面向对象进阶 在前面的章节我们已经了解了面向对象的入门知识,知道了如何定义类,如何创建对象以及如何给对象发消息。为了能够更好的使用面向对象编程思想进行程序开发,我们还需要对Python中的面向对象编程进行更为深入的了解。 property装…

88.乐理基础-记号篇-反复记号(二)D.C.、D.S.、Fine、Coda

内容参考于:三分钟音乐社 上一个内容:87.乐理基础-记号篇-反复记号(一)反复、跳房子-CSDN博客 下图红色左括号框起来的东西,它们都相对比较抽象一点,这几个词都是意大利语 首先D.C.这个标记,然…

江苏桉木建筑模板 — 现货供应,施工高效

在快节奏的建筑行业中,有效率的施工和高质量的材料是成功的关键。江苏桉木建筑模板以其现货供应和高效施工的特点,在建筑行业中获得了广泛的认可和使用。 产品特点 高质量桉木材质:我们的建筑模板采用高品质的桉木,确保了模板的…

k8s中的基础概念

k8s可以从硬件和软件两方面来理解: 硬件: 1、节点(Node):类似于手机、平板、电脑 2、集群(Cluster):多个节点组合到一起 3、持久卷(Persistent Volumes)&…

Java多线程并发篇----第十篇

系列文章目录 文章目录 系列文章目录前言一、start 与 run 区别二、JAVA 后台线程三、什么是乐观锁前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、start 与 r…