Unity(10)-OnGUI界面

发布时间:2025-12-10 11:37:08 浏览次数:6

文章目录

  • 前言
    • 其他介绍
    • 上一篇笔记
  • 一、Label控件(标签)
    • [1]. 函数介绍
    • [2]. 显示文字
    • [3]. 显示图片
    • [4]. 显示图片和文字
  • 二、Text控件(文本框)
    • [1]. 控件介绍
    • [2]. 函数介绍
    • [3]. 单行文本
    • [4]. 多行文本
    • [5]. 加密文本
    • [6]. 单行文本 + 长度限制
    • [7]. 单行文本 + 文本获取
  • 三、Button控件(按钮)
    • [1]. 控件介绍
    • [2]. 函数介绍
    • [3]. 创建按钮
    • [4]. Button按钮监听
    • [5]. RepeatButton按钮监听
    • [6]. RepeatButton按钮监听 + 更换图片
  • 四、Toggle控件(复选框)
    • [1]. 函数介绍
    • [2]. 创建复选框
    • [3]. 状态切换
  • 五、Toolbar控件(工具栏)
    • [1]. 函数介绍
    • [2]. 创建工具栏
    • [3]. 状态切换
  • 六、SelectionGrid控件(选择表格)
    • [1]. 函数介绍
    • [2]. 创建选择表格
    • [3]. 状态切换
  • 七、Slider控件(滑块)
    • [1]. 控件介绍
    • [2]. 函数介绍
    • [3]. 创建水平滑块
    • [4]. 创建垂直滑块
    • [5]. 水平滑块 + 状态切换

前言

  • GUI即用户接口Graphical User Interface,就是图形用户界面。
    OnGUI生命周期函数每帧都会被调用一次,所以在声明变量的时候尽量不要写在OnGUI函数中。
  • OnGUI不大适合作为项目的UI,可以使用NGUI或UGUI替代
  • 文章里面的控件都是通过函数生成的,不是附加在对象上的组件。
  • 现在会的内容不多,准备边学习,边更新文章记录学习过程。
    不保证文章的内容是正确的,如果有错误可在下方评论。

Unity版本: 2019.4.26
Visual Studio版本: 2019

其他介绍

微软官方C#函数文档

Unity官方API文档(英文)

Unity官方API文档(中文)

Unity官方用户手册(中文)

Unity游戏蛮牛API文档(中文)

Unity教程-C语言中文网

Unity用户手册-unity圣典

Unity组件手册-unity圣典

Unity脚本手册-unity圣典

上一篇笔记

Unity(9)-TileMap瓦片地图

一、Label控件(标签)

  • 此控件提供了风格化的控制效果,可在屏幕上显示只读文本。
    函数中有多个可选的参数,可以根据实际的需求选择
  • 在显示图片的时候,是以Rect矩形的最左上角的点来放置图像
    在使用Screen.width或Screen.height时,需要减去一定的数值不然会超出屏幕范围。

相关参考链接如下:
Unity中Rect类型详解-博客园
Unity 3D Label控件-C语言中文网
GUIContent-Unity官方API文档(中文)
Unity 3D ToolTip控件-C语言中文网

[1]. 函数介绍

Label参数介绍
content显示文本、图片,类型为GUIContent
image图片素材,类型为Texture
position文本放置的坐标及宽高,类型为四元组Rect
style样式,类型为GUIStyle
text文本内容,类型为字符串string



Rect参数介绍
x横轴坐标,值为0时为屏幕最左侧,整个屏幕的宽度为Screen.width,类型为浮点型float
y纵轴坐标,值为0时为屏幕最上侧,整个屏幕的高度为Screen.height,类型为浮点型float
width矩形宽度(横轴x),类型为浮点型float
height矩形高度(纵轴y),类型为浮点型float

[2]. 显示文字

将gui脚本绑定到Main Camera中

播放游戏

using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{private void OnGUI(){GUI.Label(new Rect(25,25, 100, 30),"文本");}}

[3]. 显示图片

将gui脚本绑定到Main Camera中
并引用图片素材

播放游戏

using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{//引用public Texture img;private void OnGUI(){GUI.Label(new Rect(0,0, 100, 30),img);}}

[4]. 显示图片和文字

  • 将gui脚本绑定到Main Camera中
  • 在代码中定义了一个公有GUIContent类型的变量con
    显示在外部的时候会出现三个参数Text、Image和Tooltip
  • Text就是显示的文本内容,将会出现在Image的右侧
    Image显示的图片素材
    Tooltip还没搞懂,就不误导大家了,弄懂的话再补充进来
using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{//引用public GUIContent con;private void OnGUI(){GUI.Label(new Rect(0,0, 100, 30),con);}}

二、Text控件(文本框)

  • 可以使用文本框来显示一串文本,也可以使用文本框来获取用户的输入。
    在多行文本框中使用\n可换行
  • 需要注意的是使用双引号时,"文本"里面的内容是字符串类型string;
    而使用单引号时,'文本'里面的内容是字符类型char。
  • 因为多行文本框和加密文本框仅在代码上和单行文本框不同,除了单行文本框之外的项目结构就不展示了。

相关参考链接如下:
Unity3D TextField控件-C语言中文网
GUIStyle 界面样式-unity圣典
Unity中Rect类型详解-博客园

[1]. 控件介绍

控件介绍
GUI.TextField单行文本框,无法换行
GUI.TextArea多行文本框
GUI.PasswordField加密文本框,用指定的字符替换输入的字符,适用于输入密码的时候

[2]. 函数介绍

TextField参数介绍
maxLenght可显示的最大字符个数,类型为整型int
position文本放置的坐标及宽高,类型为四元组Rect
style样式,类型为GUIStyle
text文本内容,类型为字符串string




TextArea参数介绍
maxLenght可显示的最大字符个数,类型为整型int
position文本放置的坐标及宽高,类型为四元组Rect
style样式,类型为GUIStyle
text文本内容,类型为字符串string



PasswordField参数介绍
maskChar指定的替换字符,类型为字符char
maxLenght可显示的最大字符个数,类型为整型int
password文本内容,类型为字符串string
position文本放置的坐标及宽高,类型为四元组Rect
style样式,类型为GUIStyle




Rect参数介绍
x横轴坐标,值为0时为屏幕最左侧,整个屏幕的宽度为Screen.width,类型为浮点型float
y纵轴坐标,值为0时为屏幕最上侧,整个屏幕的高度为Screen.height,类型为浮点型float
width矩形宽度(横轴x),类型为浮点型float
height矩形高度(纵轴y),类型为浮点型float

[3]. 单行文本

绑定gui脚本至MainCamera摄像机

播放游戏

using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{string txt = "这是一串文本";private void OnGUI(){GUI.TextField(new Rect(0,0,100,100),txt); }}

[4]. 多行文本

using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{string txt = "第一行文本\n第二行文本";private void OnGUI(){GUI.TextArea(new Rect(0,0,100,100),txt); }}

[5]. 加密文本

using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{string txt = "第一行文本\n第二行文本";private void OnGUI(){GUI.PasswordField(new Rect(0,0,100,100),txt,'*'); }}

[6]. 单行文本 + 长度限制

多行文本、加密文本实现原理类似

using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{string txt = "陕西考古人员最近在榆林市靖边县发现一处国内罕见的明代长城营堡遗址";private void OnGUI(){GUI.TextField(new Rect(0,0,100,100),txt,5); }}

[7]. 单行文本 + 文本获取

通过一个新的公有变量txt1来保存文本的内容,在运行游戏时在界面显示文本框,在脚本变量中显示txt1内容。
多行文本、加密文本实现原理类似


using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{public string txt1;private string txt2 = "一串文本";private void OnGUI(){txt1 = GUI.TextArea(new Rect(0,0,100,100),txt2); }}

三、Button控件(按钮)

  • RepeatButton和Button创建的方式是一样的
    RepeatButton在监听时,用户按住按钮将会一直触发条件

相关参考链接如下:
控件-Unity官方用户手册(中文)
Button和RepeatButton控件-CSDN

[1]. 控件介绍

控件介绍
Button基本的按钮,按下只响应一次
RepeatButtonButton的扩展按钮,支持按下时每帧都可以响应

[2]. 函数介绍

Button参数介绍
content显示文本、图片,类型为GUIContent
image图片,类型为Texture
position按钮放置的坐标及宽高,类型为四元组Rect
style样式,类型为GUIStyle
text文本内容,类型为字符串string





RepeatButton参数介绍
content显示文本、图片,类型为GUIContent
image图片,类型为Texture
position按钮放置的坐标及宽高,类型为四元组Rect
style样式,类型为GUIStyle
text文本内容,类型为字符串string






Rect参数介绍
x横轴坐标,值为0时为屏幕最左侧,整个屏幕的宽度为Screen.width,类型为浮点型float
y纵轴坐标,值为0时为屏幕最上侧,整个屏幕的高度为Screen.height,类型为浮点型float
width矩形宽度(横轴x),类型为浮点型float
height矩形高度(纵轴y),类型为浮点型float

[3]. 创建按钮

绑定gui脚本至MainCamera摄像机

播放游戏

using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{private void OnGUI(){GUI.Button(new Rect(100,100,100,20),"按钮");}}

[4]. Button按钮监听

  • 先设置一个变量txt在类中,每帧都绘制一个Label和Button控件
  • 一开始没有按下按钮时,txt的值是空,所以屏幕的Label控件没有内容
    当按下按钮后,设置了txt的值,所以在下一帧绘制Label时就会出现文字。
using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{string txt;//文本内容private void OnGUI(){GUI.Label(new Rect(0,0,100,100),txt);//创建Label控件if(GUI.Button(new Rect(100,100,100,20),"按钮"))//按下按钮时{txt = "Button被触发";}}}

[5]. RepeatButton按钮监听

  • 使用RepeatButton时就可以直接在条件之内创建一个Label控件,如果是Button作为按钮时就没有实际效果
  • 当按下按键后创建一个Label控件显示文字,松开按钮后控件就被回收
using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{private void OnGUI(){if(GUI.RepeatButton(new Rect(100,100,100,20),"按钮"))//按下按钮时{GUI.Label(new Rect(0,0,200,50),"RepeatButton按钮被按下");//创建一个Label控件}}}

[6]. RepeatButton按钮监听 + 更换图片



先将gui脚本添加到Main Camera摄像机,再引用两个素材

using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{//引用public Texture img1;//未按下按钮时public Texture img2;//按下按钮时private void OnGUI(){if(GUI.RepeatButton(new Rect(100,100,60,20),img1))//按下按钮时{GUI.RepeatButton(new Rect(100,100,60,20), img2);//替换图片}}}

四、Toggle控件(复选框)

[1]. 函数介绍

Toggle参数介绍
content显示文本、图片,类型为GUIContent
image图片,类型为Texture
position复选框放置的坐标及宽高,类型为四元组Rect
style样式,类型为GUIStyle
text文本内容,类型为字符串string
value复选框的状态,类型为布尔bool







Rect参数介绍
x横轴坐标,值为0时为屏幕最左侧,整个屏幕的宽度为Screen.width,类型为浮点型float
y纵轴坐标,值为0时为屏幕最上侧,整个屏幕的高度为Screen.height,类型为浮点型float
width矩形宽度(横轴x),类型为浮点型float
height矩形高度(纵轴y),类型为浮点型float

[2]. 创建复选框

此时点击之后不会有效果

using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{private void OnGUI(){GUI.Toggle(new Rect(100,100,100,20),false,"复选框");}}

[3]. 状态切换

  • 先在类中定义一个bool类型的变量,初始化为false
  • 并在创建复选框时把这个变量的值传入,再使用这个变量接收复选框当前的状态
    如果用户点击了复选框,GUI.Toggle()就会返回一个true,这样就能更新下一帧复选框的状态
using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{bool state = false;//记录复选框状态private void OnGUI(){state = GUI.Toggle(new Rect(100,100,100,20),state,"复选框");}}

五、Toolbar控件(工具栏)

下图是unity的工具栏,通过Toolbar也可以实现同样的效果
Toolbar包含有多个按钮,用户一次只能选择其中的一个按钮来使用

[1]. 函数介绍

Toolbar参数介绍
buttonSize按钮的大小,类型为GUI.ToolbarButtonSize
contents显示文本、图片,类型为GUIContent数组
images图片,类型为Texture数组
position每个按钮放置的坐标及宽高,类型为四元组Rect
selected当前按下的按钮索引,类型为整型int
style样式,类型为GUIStyle







Rect参数介绍
x横轴坐标,值为0时为屏幕最左侧,整个屏幕的宽度为Screen.width,类型为浮点型float
y纵轴坐标,值为0时为屏幕最上侧,整个屏幕的高度为Screen.height,类型为浮点型float
width矩形宽度(横轴x),类型为浮点型float
height矩形高度(纵轴y),类型为浮点型float

[2]. 创建工具栏

  • 传入的整型参数表示按下的工具栏的按钮索引,索引最小为0
    创建的按钮个数和字符串数组的元素个数有关
  • 此时可以看到被按下的是按钮1,点击这些按钮时不会有效果
using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{string[] txt = { "按钮1","按钮2","按钮3","按钮4"};private void OnGUI(){GUI.Toolbar(new Rect(0,100,200,20),0,txt);}}

[3]. 状态切换

通过一个变量index来存储每一次用户按下按钮的索引值,并在下一帧更新工具栏

using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{string[] txt = { "按钮1","按钮2","按钮3","按钮4"};int index = 0;private void OnGUI(){index = GUI.Toolbar(new Rect(0,100,200,20),index,txt);}}

六、SelectionGrid控件(选择表格)

[1]. 函数介绍

SelectionGrid参数介绍
contents显示文本、图片,类型为GUIContent数组
images图片,类型为Texture数组
position每个按钮放置的坐标及宽高,类型为四元组Rect
selected当前按下的按钮索引,类型为整型int
style样式,类型为GUIStyle
xCount横轴的按钮个数,类型为整型int






Rect参数介绍
x横轴坐标,值为0时为屏幕最左侧,整个屏幕的宽度为Screen.width,类型为浮点型float
y纵轴坐标,值为0时为屏幕最上侧,整个屏幕的高度为Screen.height,类型为浮点型float
width矩形宽度(横轴x),类型为浮点型float
height矩形高度(纵轴y),类型为浮点型float

[2]. 创建选择表格

-传入参数index值为0,表示第一个按钮被选中

  • 2是每行的按钮个数,如果超出这个值按钮就会换行
using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{string[] txt = { "按钮1","按钮2","按钮3","按钮4","按钮5"};int index = 0;//选择的按钮索引private void OnGUI(){GUI.SelectionGrid(new Rect(100,100,200,90),index,txt,2);}}

[3]. 状态切换

将选中的按钮索引,又传入index,在下一帧时更新状态

using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{string[] txt = { "按钮1","按钮2","按钮3","按钮4","按钮5"};int index = 0;//选择的按钮索引private void OnGUI(){index = GUI.SelectionGrid(new Rect(100,100,200,90),index,txt,2);}}

七、Slider控件(滑块)

[1]. 控件介绍

控件介绍
GUI.HorizontalSlider水平滑块
GUI.VerticalSlider垂直滑块

[2]. 函数介绍

HorizontalSlider参数介绍
leftValue滑动区域左侧点,类型为浮点float
position每个按钮放置的坐标及宽高,类型为四元组Rect
rightValue滑动区域右侧点,类型为浮点float
slider滑动区域的样式,类型为GUIStyle
thumb滑块的样式,类型为GUIStyle
thumbExtent滑块触发事件的样式,类型为GUIStyle
value滑块的位置,类型为浮点float



VerticalSlider参数介绍
bottomValue滑动区域的顶部,类型为浮点float
position每个按钮放置的坐标及宽高,类型为四元组Rect
slider滑动区域的样式,类型为GUIStyle
thumb滑块的样式,类型为GUIStyle
thumbExtent滑块触发事件的样式,类型为GUIStyle
topValue滑动区域的底部,类型为浮点float
value滑块的位置,类型为浮点float



Rect参数介绍
x横轴坐标,值为0时为屏幕最左侧,整个屏幕的宽度为Screen.width,类型为浮点型float
y纵轴坐标,值为0时为屏幕最上侧,整个屏幕的高度为Screen.height,类型为浮点型float
width矩形宽度(横轴x),类型为浮点型float
height矩形高度(纵轴y),类型为浮点型float

[3]. 创建水平滑块

创建了一个起点为0,终点为10的滑动区域
传入的5为滑块创建时所处位置

using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{private void OnGUI(){GUI.HorizontalSlider(new Rect(100,100,100,20),5f,0f,10f);}}

[4]. 创建垂直滑块

using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{private void OnGUI(){GUI.VerticalSlider(new Rect(100, 100, 20, 200), 5, 0f, 10f);}}

[5]. 水平滑块 + 状态切换

用一个变量来控制滑块的位置,在下一帧更新滑块位置
垂直滑块和水平滑块的实现方法一样

using System.Collections;using System.Collections.Generic;using UnityEngine;public class gui : MonoBehaviour{float state;private void OnGUI(){state = GUI.HorizontalSlider(new Rect(100, 100, 100, 20), state, 0f, 10f);}}
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477