UnityGUI简介
UnityGUI简介
GUI是什么?
unityGUI全称:即使模式游戏用户交互界面(IMGUI)
在Unity中一般简称为GUI,它是一个代码驱动的UI系统。
GUI的主要作用
- 作为程序员的调试工具,船舰游戏内调试工具。
- 为脚本组件创建自定义监视面板。
- 创建新的编辑器窗口和工具以拓展Unity本身(一般作为内置游戏工具)。
- 注意:不用用IMGUI为玩家制作UI功能。
GUI的工作原理
Unity的GUI有自己的生命周期,在继承Monobehaviour的脚本中的特殊函数中在OnGUI函数中书写GUI相关逻辑。
注意:
- OnGUI是每帧执行,相当于专门绘制GUI界面的函数。
- 一般只在其中执行GUI相关界面绘制和操作逻辑。
- 该函数在OnDisable之前,在LateUpdate之后。
- 只要是继承了Mono的脚本,都可以在OnGUI中绘制GUI。
GUI控件的共同点
- 所有的GUI控件都是GUI类的静态函数。
- 所有的GUI控件参数列表大同小异:
- 位置参数:Rect参数
- 显式文本:string参数
- 图片参数:Texture参数
- 综合信息:GUIContent参数,可以既有文本信息又有图片信息。
- 自定义样式:GUIStyle参数
- 每一种控件都有多种重载,都是各个参数的排列组合,但所有控件一定都有位置信息和显示信息。
- 通常采用接受返回值来保证数据更新。(只有返回值被接收了下一次程序进入GUI函数,值才会更新)
文本控件
函数名:
Label,无返回值
结构:
GUI.Label(Rect,内容,样式);
按钮控件
函数名:
- Button,按下抬起后响应一次,bool返回值。
- RepeatButton,按下持续响应,bool返回值。
结构:
GUI.Button(Rect,内容,样式);
多选框
函数名:
Toggle,点击后返回一个与传入bool值相反的bool值,bool返回值。
自定义多选框设置GUIStyle选中效果和取消效果的是normal和on normal。
结构
GUI.Toggle(Rect, bool标识, 内容, 样式);
单选框
单选框是多选框的一种特殊形式。我们使用一个int标识来处理,如下代码
private void index = 1;
private void OnGUI()
{if(GUI.Toggle(new Rect(0,60,100,30), index == 1, "选项1")){index = 1;}if(GUI.Toggle(new Rect(0,100,100,30), index == 2, "选项2")){index = 2;}if(GUI.Toggle(new Rect(0,140,100,30), index == 3, "选项3")){index = 3;}
}
我们就以第二个index == 2为例分析一下:
首先进入第二个if判断,index == 2为false,这时点击第二个Toggle时,Toggle会返回true,这时就会进入if语句块,并将index赋值为2,下一帧进入OnGUI后渲染出来的UI就是选项2被选中。
输入框
函数名:
- TextArea
- TextField,返回值均为string,想要持续改变输入值,原理与单选框的int标识原理一样:将这一帧的输入结果保存在一个成员变量中,下一帧再将这个成员变量作为参数传入方法中。
- PasswordField
结构:
GUI.TextArea(Rect, 内容, Length, 样式);GUI.TextField(Rect, 内容, Length, 样式);GUI.PasswordField(Rect, 内容,替换字符 , Length, 样式);
拖动条
函数名:
- HorizontalSlider
- VerticalSlider,float返回值
结构:
GUI.HorizontalSlider(Rect, nowValue, bottomValue, topValue, 样式1, 样式2, 样式3);GUI.VerticalSlider(Rect, nowValue, bottomValue, topValue, 样式1, 样式2, 样式3);
图片绘制
函数名:
DrawTexture,无返回值
结构:
GUI.DrawTexture(Rect, Texture, ScaleMode, bool alphaBlend, float imageAspect ......);
ScaleMode:
- ScaleAndCrop:也会通过宽高比来计算图片,不会拉伸变形 但是 会进行裁剪。
- ScaleToFit:会根据宽高比和宽高中最小的的值来进行计算,不会拉伸变形,会一直保持图片完全显式的状态。
- StretchToFill:始终填充充满你传入的Rect范围。
alpha:是用来控制图片是否开启透明通道。
imageAspect:自定义宽高比,如果不填默认为0,会使用图片原始宽高比。
框绘制
函数名:
box,无返回值。不常用
结构:
GUI.Box(rect, 内容, 样式);
工具栏
函数名:
Toolbar,int返回值,可以用来制作类似于unity快捷工具栏的UI。
结构:
GUI.Toolbar(Rect, int标识, 内容数组, 样式);
应用:
private int toolbarIndex = 0;
private string[] toolbarInfos = new []{"123","456","789"};
private void OnGUI(){toolbarIndex = GUI.Toolbar(new Rect(0,0,200,30), toolbarIndex, toolbarInfos);//不同选择对应不同的逻辑处理switch(toolbarIndex){case 0:break;case 1:break;case 2:break;}
}
选择网格
函数名:
SelectionGrid,与工具栏相同,但多一个限制每行的最多个数的属性xCount。
分组
函数名:
BeginGroup,无返回值,主要用于对GUI控件进行分组。
结构:
GUI.BeginGroup(Rect,内容,样式);
应用:
GUI.BeginGroup(Rect,内容,样式);
//中间添加要分组的控件
GUI.EndGaroup();
滚动列表
函数名:
BeginScorllView,返回值为Vector2
结构:
GUI.BeginScorllView(viewRect, nowPos, showRect, 样式);
参数介绍:
- viewRect:当前前方可视窗口的Rect。
- showRect:当前后方内容窗口的Rect。
- nowPos:当前内容的坐标。
应用:
GUI.BeginScorllView(viewRect, nowPos, showRect, 样式);
//可视窗口的内容
GUI.EndScorllView();
窗口
函数名:
Window,Rect返回值。用于制作UI窗口,Window中的UI控件应当写在Window的委托参数的函数中。
结构:
GUI.Window(id, Rect, 控件委托, 内容, 样式);
参数介绍:
- id:窗口id,负责区分不同窗口。在委托函数中也可以通过
- 委托函数:用于处理窗口控件函数。
模态窗口
函数名:
ModalWindow,无返回值,当出现模态窗口时只有处理完警告弹窗的逻辑后,其他控件逻辑才允许被继续处理常用于警告弹窗。
结构:
GUI.Window(id, Rect, 控件委托, 内容, 样式);
拖动窗口
使用成员变量接收Rect返回值,并在委托函数中写GUI.DragWindow方法。
DragWindow可以使用重载传入Rect参数,作用是决定窗口的那一部分位置可以被拖动。
默认不填就是窗口的所有位置都可以被拖动。
整体皮肤样式
GUIskin就是一个GUIstyle的集合。
GUIskin可以在资源视图右键创建。
应用:
GUI.skin = skin;
GUILayout自动布局
GUILayout拥有GUI类所有的控件。但与GUI类不同的是,GUILayout可以自动排序。
水平排序:
BeginHorizontal
EndHorizontal
垂直排序:
BeginVertical
EndVertical
布局选项GUILayoutOption:
一些控件是有GUILayoutOption[]的params数组参数的,直接添加以下方法即可。
//控件的固定宽高
GUILayout.Width();GUILayout.Height();//允许控件的最小宽高
GUILayout.MinWidth();GUILayout.MinHeight();//允许控件的最大宽高
GUILayout.MaxWidth();GUILayout.MaxHeight();//允许或禁止水平拓展
GUILayout.ExpandWidth();GUILayout.ExpandHeight();
UnityGUI简介相关推荐
- etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理
1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...
- Docker学习(一)-----Docker简介与安装
一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...
- 【Spring】框架简介
[Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...
- TensorRT简介
TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...
- 谷粒商城学习笔记——第一期:项目简介
一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...
- 通俗易懂的Go协程的引入及GMP模型简介
本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...
- Linux 交叉编译简介
Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...
- TVM Operator Inventory (TOPI)简介
TOPI简介 这是 TVM Operator Inventory (TOPI) 的介绍.TOPI 提供了比 TVM 具有更高抽象的 numpy 风格的,通用操作和调度.TOPI 如何在 TVM 中,编 ...
- 计算机视觉系列最新论文(附简介)
计算机视觉系列最新论文(附简介) 目标检测 1. 综述:深度域适应目标检测标题:Deep Domain Adaptive Object Detection: a Survey作者:Wanyi Li, ...
最新文章
- python学习 爬取亚马逊网页,失败后。修改HTTP报文头部后成功!
- Schnorr签名与比特币隐私的必然性
- PHP学习笔记-字符串操作2
- python趣味编程10例-python趣味编程100例(99个)
- 生物计算:SIR模型笔记
- js可以放gif吗_你清楚,一瓶开过的葡萄酒,最长可以放多久的时间吗?
- asp:dropdownlist如何去掉三角箭头_一棵悬崖三角枫的培养过程
- redis 图片2进制保存_Redis数据结构底层的SDS了解吗
- 信息学奥赛一本通(1246:膨胀的木棍)
- 文件的读操作 c# 1614526130
- 按clear按钮清空两个文本框的内容,按copy按钮时将Source文本框的内容复制到Target文本框,按close按钮结束程序的运行
- Linux进阶之日志管理
- python爬虫微博24小时热搜_GitHub - Writeup007/weibo_Hot_Search: 微博爬虫:每天定时爬取微博热搜榜的内容,留下互联网人的记忆。...
- Windows设置调节音量的快捷键
- android模拟器连接不到本地服务器
- tic tac toe php,Python函数找出tic tac toe获胜者
- 解决Android studio运行代码手机出现xxx keeps stopping
- KVM多电脑切换器的KVM发展史
- 古墓丽影暗影显卡测试软件,游戏新消息:战地5古墓丽影暗影8K测试单显卡根本带不动...
- 解决Android自定义相机预览和照片分辨率差异的问题