UnityGUI简介

UnityGUI简介

GUI是什么?

unityGUI全称:即使模式游戏用户交互界面(IMGUI)

在Unity中一般简称为GUI,它是一个代码驱动的UI系统。

GUI的主要作用

  1. 作为程序员的调试工具,船舰游戏内调试工具。
  2. 为脚本组件创建自定义监视面板。
  3. 创建新的编辑器窗口和工具以拓展Unity本身(一般作为内置游戏工具)。
  4. 注意:不用用IMGUI为玩家制作UI功能。

GUI的工作原理

Unity的GUI有自己的生命周期,在继承Monobehaviour的脚本中的特殊函数中在OnGUI函数中书写GUI相关逻辑。

注意:

  1. OnGUI是每帧执行,相当于专门绘制GUI界面的函数。
  2. 一般只在其中执行GUI相关界面绘制和操作逻辑。
  3. 该函数在OnDisable之前,在LateUpdate之后。
  4. 只要是继承了Mono的脚本,都可以在OnGUI中绘制GUI。

GUI控件的共同点

  1. 所有的GUI控件都是GUI类的静态函数。
  2. 所有的GUI控件参数列表大同小异:
    1. 位置参数:Rect参数
    2. 显式文本:string参数
    3. 图片参数:Texture参数
    4. 综合信息:GUIContent参数,可以既有文本信息又有图片信息。
    5. 自定义样式:GUIStyle参数
  3. 每一种控件都有多种重载,都是各个参数的排列组合,但所有控件一定都有位置信息和显示信息。
  4. 通常采用接受返回值来保证数据更新。(只有返回值被接收了下一次程序进入GUI函数,值才会更新)

文本控件

函数名:

Label,无返回值

结构:

GUI.Label(Rect,内容,样式);

按钮控件

函数名:

  1. Button,按下抬起后响应一次,bool返回值。
  2. 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被选中。

输入框

函数名:

  1. TextArea
  2. TextField,返回值均为string,想要持续改变输入值,原理与单选框的int标识原理一样:将这一帧的输入结果保存在一个成员变量中,下一帧再将这个成员变量作为参数传入方法中。
  3. PasswordField

结构:

GUI.TextArea(Rect, 内容, Length, 样式);

GUI.TextField(Rect, 内容, Length, 样式);

GUI.PasswordField(Rect, 内容,替换字符 , Length, 样式);

拖动条

函数名:

  1. HorizontalSlider
  2. 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:

  1. ScaleAndCrop:也会通过宽高比来计算图片,不会拉伸变形 但是 会进行裁剪。
  2. ScaleToFit:会根据宽高比和宽高中最小的的值来进行计算,不会拉伸变形,会一直保持图片完全显式的状态。
  3. 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, 样式);

参数介绍:

  1. viewRect:当前前方可视窗口的Rect。
  2. showRect:当前后方内容窗口的Rect。
  3. nowPos:当前内容的坐标。

应用:

GUI.BeginScorllView(viewRect, nowPos, showRect, 样式);
//可视窗口的内容
GUI.EndScorllView();

窗口

函数名:

Window,Rect返回值。用于制作UI窗口,Window中的UI控件应当写在Window的委托参数的函数中。

结构:

GUI.Window(id, Rect, 控件委托, 内容, 样式);

参数介绍:

  1. id:窗口id,负责区分不同窗口。在委托函数中也可以通过
  2. 委托函数:用于处理窗口控件函数。

模态窗口

函数名:

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();
  • 6
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
UnityGUIUnity游戏引擎中的一个GUI系统,它是一种基于对象的图形用户界面系统,用于在游戏中创建交互式的用户界面。它允许开发者创建按钮、文本框、滑块等交互元素,并通过事件和回调函数来处理用户的输入和交互。 UnityGUI的源码提供了UnityGUI系统的实现细节,可以用于了解和学习UnityGUI的工作原理。通过阅读源码,开发者可以理解UnityGUI是如何创建、渲染和处理UI元素的,以及它是如何与游戏场景和其他组件进行交互的。 在UnityGUI的源码中,可以找到一些核心的类和函数,比如GUI类、GUILayout类和GUIStyle类等。GUI类提供了一系列静态函数来创建和绘制UI元素,比如按钮、标签和文本框。GUILayout类则提供了一组函数来实现自动布局,以便更方便地创建复杂的UI布局。GUIStyle类则包含了一些样式信息,比如字体、颜色和边框等。 通过查看源码,可以了解到UnityGUI的绘制原理和性能优化技巧。比如,可以看到UnityGUI是如何使用批处理技术将多个UI元素合并为一次渲染调用,以减少渲染开销。还可以了解到UnityGUI是如何处理用户的输入事件,并通过回调函数来实现相应的响应。 总之,UnityGUI的源码是一个宝贵的学习资源,可以帮助开发者更好地理解和使用UnityGUI系统。通过深入研究源码,开发者可以从中汲取经验和技巧,提高UI设计和开发的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值