1 前言

​ Unity 3D 提供了 GUI、NGUI、UGUI 等图形系统,以增强玩家与游戏的交互性。GUI 在编译时不能可视化,在运行时才能可视化。GUI 代码需要在 OnGUI 函数中调用才能绘制,布局分为手动布局(GUI)和自动布局(GUILayout)。

  • 手动布局:需要传人Rect 参数来指定屏幕绘制区域,通过 GUI 调用控件
  • 自动布局:不需要传入 Rect 参数,自动在屏幕中布局,通过 GUILayout 调用控件

​ 注意:屏幕坐标系以左上角为原点。

​ GUI 中主要包含以下控件:

  • Label:绘制文本和图片
  • Box:绘制一个图形框
  • Button:绘制按钮,响应单击事件
  • RepeatButton:绘制一个处理持续按下事件的按钮
  • TextField:绘制一个单行文本输入框
  • PasswordField:绘制一个秘密输入框
  • TextArea:绘制一个多行文本输入框
  • Toggle:绘制一个开关
  • Toolbar:绘制工具条
  • SelectionGrid:绘制一组网格按钮
  • HorizontalSlider:绘制一个水平方向的滑动条
  • VerticalSlider:绘制一个垂直方向的滑动条
  • HorizontalScrollbar:绘制一个水平方向的滚动条
  • VerticalScrollbar:绘制一个垂直方向的滚动条
  • Window:绘制一个窗口,可以用于放置控件

2 GUI 控件

1)Label:绘制文本和图片

// 绘制文本
public static void Label(Rect position, string text, GUIStyle style)
// 绘制图片
public static void Label(Rect position, Texture image, GUIStyle style)
// 应用
GUI.Label(new Rect (10, 10, 100, 20), "Hello World!");
GUI.Label(new Rect (100, 100, texture.width, texture.height), texture);

2)Box:绘制一个图形框

// 绘制带边框的文本
public static void Box(Rect position, string text, GUIStyle style)
// 绘制带边框图片
public static void Box(Rect position, Texture image, GUIStyle style)

3)****Button:绘制按钮,响应单击事件

// 绘制带文本的按钮,单击抬起时返回true
public static bool Button(Rect position, string text, GUIStyle style)
// 绘制带图片的按钮,单击抬起时返回true
public static bool Button(Rect position, Texture image, GUIStyle style)

4)RepeatButton:绘制一个处理持续按下事件的按钮

// 绘制带文本的按钮,按住时持续返回true
public static bool RepeatButton(Rect position, string text, GUIStyle style)
// 绘制带图片的按钮,按住时持续返回true
public static bool RepeatButton(Rect position, Texture image, GUIStyle style)

5)TextField:绘制一个单行文本输入框

// 绘制单行文本框
public static string TextField(Rect position, string text, int maxLength, GUIStyle style)
// 应用
private string str = "Hello World!";
private void OnGUI() {
str = GUI.TextField(new Rect (10, 10, 100, 20), str);
Debug.Log(str);
}

6)PasswordField:绘制一个秘密输入框

// 绘制密码框,maskChar为显示的符号,通常为"*"号
public static string PasswordField(Rect position, string password, char maskChar, int maxLength, GUIStyle style)

7)TextArea:绘制一个多行文本输入框

// 绘制多行文本输入框
public static string TextArea(Rect position, string text, int maxLength, GUIStyle style)

8)Toggle:绘制一个开关

// 绘制带文本的开关
public static bool Toggle(Rect position, bool value, string text, GUIStyle style)
// 绘制带图片的开关
public static bool Toggle(Rect position, bool value, Texture image, GUIStyle style)

9)Toolbar:绘制工具条

// 绘制文本工具条
public static int Toolbar(Rect position, int selected, string[] texts, GUIStyle style)
// 绘制图片工具条
public static int Toolbar(Rect position, int selected, Texture[] images, GUIStyle style)
// 应用
int selected = GUI.Toolbar(new Rect (10, 10, 300, 50), 1, new string[]{"first", "second", "third", "four"});

10)SelectionGrid:绘制一组网格按钮

// 绘制文本网格按钮, xCount为水平按钮数
public static int SelectionGrid(Rect position, int selected, string[] texts, int xCount, GUIStyle style)
// 绘制图片网格按钮, xCount为水平按钮数
public static int SelectionGrid(Rect position, int selected, Texture[] images, int xCount, GUIStyle style)
// 应用
int selected = GUI.SelectionGrid(new Rect (10, 10, 100, 50), 1, new string[]{"first", "second", "third", "four"}, 2);

11)HorizontalSlider:绘制一个水平方向的滑动条

// 绘制水平滑动条, value: 滑动条显示值, leftValue: 滑动条左值, rightValue: 滑动条右值
public static float HorizontalSlider(Rect position, float value, float leftValue, float rightValue, GUIStyle slider, GUIStyle thumb)
// 应用
float process = GUI.HorizontalSlider(new Rect (10, 10, 100, 50), 9f, 5f, 10f);

12)VerticalSlider:绘制一个垂直方向的滑动条

// 绘制垂直滑动条, value: 滑动条显示值, leftValue: 滑动条左值, rightValue: 滑动条右值
public static float VerticalSlider(Rect position, float value, float leftValue, float rightValue, GUIStyle slider, GUIStyle thumb)
// 应用
float process = GUI.VerticalSlider(new Rect (10, 10, 50, 100), 9f, 5f, 10f);

13)HorizontalScrollbar:绘制一个水平方向的滚动条

// 绘制水平滚动条, value: 滑动条显示值, size: 活塞大小, leftValue: 滑动条左值, rightValue: 滑动条右值
public static float HorizontalScrollbar(Rect position, float value, float size, float leftValue, float rightValue, GUIStyle style)
// 应用
float process = GUI.HorizontalScrollbar(new Rect (10, 10, 100, 50), 7f, 3f, 5f, 10f);

14)VerticalScrollbar:绘制一个垂直方向的滚动条

// 绘制垂直滚动条, value: 滑动条显示值, size: 活塞大小, leftValue: 滑动条左值, rightValue: 滑动条右值
public static float VerticalScrollbar(Rect position, float value, float size, float leftValue, float rightValue, GUIStyle style)
// 应用
float process = GUI.VerticalScrollbar(new Rect (10, 10, 100, 50), 7f, 3f, 5f, 10f);

15)Window:绘制一个窗口,可以用于放置控件

// 绘制窗口
public static Rect Window(int id, Rect clientRect, WindowFunction func, Texture image, GUIStyle style)
public static Rect Window(int id, Rect clientRect, WindowFunction func, string text)
public static Rect Window(int id, Rect clientRect, WindowFunction func, Texture image)
public static Rect Window(int id, Rect clientRect, WindowFunction func, GUIContent content)
public static Rect Window(int id, Rect clientRect, WindowFunction func, string text, GUIStyle style)
public static Rect Window(int id, Rect clientRect, WindowFunction func, GUIContent title, GUIStyle style)

3 GUILayout 控件

​ GUILayout 中也有 1) ~ 15) 中控件,但是不需要传入Rect 属性,以下列举部分控件的例子:

GUILayout.Label("Hello world");
GUILayout.Button("您好");

4 GUISkin

​ 在 Assets 窗口右键,选择【Create → GUI Skin】,创建 GUISkin 资源,定制 GUI 控件的属性。

​ 在代码中定义和使用 GUISkin 如下:

public GUISkin skin;

private void Awake() {
GUI.skin = skin;
}

​ 将编辑后的 GUISkin 资源文件拖拽到如下红框中,以实现自定义 GUI 控件显示效果。

​ 声明:本文转自【Unity3D】GUI控件

【Unity3D】GUI控件的更多相关文章

  1. Unity3D入门之GUI基础以及常用GUI控件使用(2)

    1.GUI基础 (1)GUI部分是每帧擦除重绘的,只应该在OnGUI中绘制GUI,按钮:GUILayout.Button(“Hello”); 只读标签:GUILayout.Label() (2)修改控 ...

  2. 从一点儿不会开始——Unity3D游戏开发学习(二) ——GUI控件之Button

    一些废话 我在上一篇“一点儿不会”的系列随笔中说大概一周会发个2~3篇关于Unity的学习笔记.可这就两周过去了,我还停留在一篇的进度上,主要是这两周发生了一些事情导致我更新缓慢.其实截至目前为止,上 ...

  3. [原]Unity3D深入浅出 - GUI控件

    Unity的GUI类提供了丰富的界面控件,通过组合这些控件,完成和用户交互的界面. Lable:绘制文本和图片 Box:绘制一个图形框 Button:绘制一个响应单击事件的按钮 RepeatButto ...

  4. Unity3D学习笔记(一)GUI控件的调用

    GUI控件:1.在Start中初始化,在OnGUI中调整.2.公有变量才会出现在Inspector面板.3.GUI控件的初始化和处理在OnGUI内完成.4.JavaScript的中文为UTF-8编码可 ...

  5. paip.gui控件tabs控件加载内容的原理以及easyui最佳实现

    paip.gui控件tabs控件加载内容的原理以及easyui最佳实现 //////////////tabs控件的加载 同form窗体一样,俩个方式 两个方式:一个是url,简单的文本可以使用这个,不 ...

  6. paip.gui控件form窗体的原理实现以及easyui的新建以及编辑实现

    paip.gui控件form窗体的原理实现以及easyui的新建以及编辑实现 //////新建 与编辑  var  EditForm=new Form_easyui();    if(row)     ...

  7. Atitit.Gui控件and面板----数据库区-mssql 2008 权限 配置 报表查看成员

    Atitit.Gui控件and面板----数据库区-mssql 2008 权限 配置 报表查看成员 1. 配置server连接权限 1 2. 配置数据库权限 1 3. 设置表格/视图安全性 2 1.  ...

  8. Atitit.Gui控件and面板----web server区----- web服务器监控面板and控制台条目

    Atitit.Gui控件and面板----web server区----- web服务器监控面板and控制台条目 1. Resin4.0.22 1 2. 查看http连接数::Summary>& ...

  9. Atitit gui控件定位解决方案

    Atitit gui控件定位解决方案 1.1. 但是AUTOIT没有找图功能..可以请大侠们写一份这个UDF出来吗?1 1.2. ahk1 1.3. Java +opencv 模板匹配2 1.1. 但 ...

  10. atitit.Atitit. Gui控件and面板-----服务端控件 java struts的实现最佳实践

    atitit.Atitit.  Gui控件and面板-----服务端控件 java struts的实现最佳实践 1. 服务器控件的类别 1 1.1. 数据控件:该类控件可细分为两种类型:数据源控件和数 ...

随机推荐

  1. SpringBoot02:运行原理初探

    @EnableAutoConfiguration @EnableAutoConfiguration:开启自动配置功能 以前我们需要自己配置的东西,而现在SpringBoot可以自动帮我们配置 @Ena ...

  2. Qt5.9 UI设计(四)——布局设计及自定义界面

    前言 前面我们已经创建了mainwindow ControlTabWidget ControlTreeWidget maintitlebar 4个UI几面,我们需要将其他三个UI放置到mainwind ...

  3. 在Winform系统开发中,使用MediatR来实现类似事件总线的消息处理

    MediatR是一款进程内的消息订阅.发布框架,可实现请求/响应.命令.查询.通知和事件的消息传递,解耦了消息处理器和消息之间耦合.提供了Send方法用于发布到单个处理程序.Publish方法发布到多 ...

  4. Python 变量?对象?引用?赋值?一个例子解释清楚

    哈喽大家好,我是咸鱼. 前天有个小伙伴找到我,给了我一段 python 代码: a = [1, 2] a[1] = a print(a[1]) 然后问我为什么结果是 [1, [...]],我一看这个问 ...

  5. 阿里云ECS自建K8S_IPV6重启后异常问题解决过程

    阿里云ECS自建K8S_IPV6重启后异常问题解决过程 背景 最近安装了一个单节点的K8S_IPV6 昨天不知道何故 突然宕机了. 然后只能在阿里云的控制台后台重启了ECS 启动之后看K8S的状态一开 ...

  6. [转帖]061、监控指标之TiKV

    资源相关 Grafana监控 TiKV-Details -> Cluster - Store Size / Available Size Grafana监控 TiKV-Details -> ...

  7. [转帖]麒麟v10上部署TiDBv5.1.2生产环境的最佳实践

    https://tidb.net/book/tidb-monthly/2022/2022-07/usercase/tidb-v5-1-2 前言​ 笔者最近在一个银行项目中做 PoC 测试,由于客户选择 ...

  8. [转帖]以 PostgreSql 为例,说明生产级别数据库安装要考虑哪些问题?

    https://xie.infoq.cn/article/487b467b952683e6dd27d9061 我让公司的小伙伴写一个生产级别的 PostgreSQL 的安装文档,结果他和我说:&quo ...

  9. [转帖]Kafka高可用 — KRaft集群搭建

    Apache Kafka Raft 是一种共识协议,它的引入是为了消除 Kafka 对 ZooKeeper 的元数据管理的依赖,被社区称之为 Kafka Raft metadata mode,简称 K ...

  10. Mysql8.0.32 union all创建视图无法使用中文模糊查询的坑

    Mysql8.0.32 union all创建视图无法使用中文模糊查询的坑 摘要 本周研发同事反馈现场有一个问题. 客户使用mysql的数据库(Windows平台) 然后在多表union all 创建 ...