UGUI基础

1、UGUI概述

1.1、Unity界面发展史

【老版本界面onGUI】=>【GUI插件NGUI】=>【新版本界面UGUI】

1.2、UGUI特点

新的UI系统是从Unity4.6开始被集成到Unity编译器中的。Unity官方给这个新的UI系统赋予的标签是:灵活,快速和可视化。
对于开发者而言,就是有三个优点:效率高效果好,易于使用和扩展以及与Unity的兼容性高。
新的UGUI系统具有以下特点:
1、引擎内置,结合更加紧密。
2、运行稳定,操作方便。

1.3、UGUI优点

UGUI与老版本onGUI相比:
1、独立的坐标体系;
2、全新的事件机制;
3、更佳高效率的运转效率。
UGUI与GUI插件NGUI相比:
1、由NGUI创始人参与开发;
2、与Unity结合更加密切;
3、自适应系统更加完善;
4、更方便的深度处理;
5、省去Altas,直接使用Sprite Packer;

2、UGUI画布

2.1、创建UGUI控件

第一种: 在Hierarchy当中通过 右键=>UI,找到相应的UI控件。
第二种:通过工具栏【GameObject】=>【UI】,找到相应的UI控件。

2.2、Canvas画布

当我们任意创建一个UI控件的时候可以看到在层级视图当中不但生成我们创建的控件,还会同时创建一个Canvas和EventSystem。


image.png

Canvas是画布,是所有UI控件的根类,也可以看作所有UI控件的父物体,所有UI控件都必须在Canvas上面绘制。它是一个带有Canvas组件的游戏物体EventSystem事件系统,负责监听用户的输入。
创建UI控件时,当层级视图当中没有Canvas和EventSystem系统会帮我们自动创建。

2.3、总结

1、UGUI画布也称为Canvas,UGUI是所有控件的父类。
2、所有UGUI控件都必须绘制在画布上面。
3、当创建UGUI控件,工程当中没有Canvas的时候会自动创建Canvas与EventSystem。

3、UGUI基础控件

3.1、Text

Text控件是用来显示文本的文本控件,选中Text可以查看属性:
--Text :创建控件时显示的文字
--Character:
--Font :字体
--Font Style :字体格式:黑体/斜体
--Font Size :字体大小
--Line Spacing :行间距
--Rich Text :富文本
--Paragraph:
--Alignment :对其方式
--Horizontal Overflow :水平溢出
--Vertical Overflow :垂直溢出


image

Text的属性可以在Inspector当中通过Text组件进行设置,也可以在代码当中进行动态设置。给Canvas挂载脚本 UGUISetting.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Script_2 : MonoBehaviour {
    Text text;
    // Use this for initialization
    void Start () {
        text = GameObject.Find("Text").GetComponent<Text>();
        text.text = "hello world!";
        text.alignment = TextAnchor.MiddleCenter;
        text.fontSize = 20;
        text.fontStyle = FontStyle.BoldAndItalic;
        text.color = Color.red;
    }
    
    // Update is called once per frame
    void Update () {
        
    }
}

3.2、Image

Image控件主要是用来显示图片,显示图片的格式是Sprite,具体属性如下:
--Source Image :Image显示的图片,图片格式为Sprite
--Color :颜色。
--Material :材质。
--Preserve Aspect :图像宽高是否按原始比例。
--Set Native Size :将Image大小设置为图片默认大小。


image.png

当我们给Image选择一张贴图之后会出现Image Type选项,如下图。ImageType总共有四种选项:
--simple :显示单个会拉伸;
--Tilled :平铺显示,图片按照原始显示;
--Sliced :按照九宫格显示,拉伸区域只会在九宫格中间;
--Filled :填充显示,可以根据不同的填充方式模拟技能冷却的效果。


image.png

Image Type的Filled填充模式常可以用来制作血条,冷却技能等。
示例:如何使用程序控制图片填充显示: 当按键A按下的时候Image控件180度填充显示。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Script_2 : MonoBehaviour {
    Image image;
    // Use this for initialization
    //在Start方法中获取Image控件,设置填充模式为180度填充:
    void Start () {
        image = GameObject.Find("Image").GetComponent<Image>();
        image.fillMethod= Image.FillMethod.Radial180;
    }
    bool isFilled = true;
    // Update is called once per frame
    //在Update方法中判断当按键A按下的时候让图片180度填充:
    void Update () {
        if (Input.GetKeyDown(KeyCode.A))
        {
            isFilled = false;
        }
        if (!isFilled)
        {
            image.fillAmount += Time.deltaTime;
            if (image.fillAmount >= 1)
            {
                image.fillAmount = 1;
                isFilled = true;
            }
        }
    }
}

3.3、RawImage

RawImage同样是用来显示图片的控件,跟Image控件的差别就是Image显示图片的格式为Sprite,RawImage显示图片的格式为Texture,此外RawImage可以控制行列。
--Raw Image(Script)
--Texture :导入的图片样式
--UV Rect:纹理贴图坐标,w和h


image.png

3.4、Button

Button控件,包含的Text控件用于显示按钮的文本。
当某个UGUI控件添加了Button组件便拥有了按钮点击的功能。
Button组件:
--Interactable :是否可以交互。
--Transition :按钮的过渡效果。
--按钮在不同状态的颜色:
--Normal Color
--Highlighted Color
--Pressed Color
--Disabled Color
--Color Multiplier
--Navigation :控件间导航。
--On Click() :给按钮添加响应事件。


image.png

Transition用于设置按钮在不同状态间的过渡效果,总共有四种方式:
--(1)None :无过渡效果
--(2)Color Tint :设置不同状态不同颜色来过渡。
--(3)Sprite Swap :设置不同图片来过渡不同状态。
--(4)Animation :设置不同动画过渡不同状态。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Script_2 : MonoBehaviour {
    Button button;
    // Use this for initialization
    void Start () {
        button = GameObject.Find("Button").GetComponent<Button>();
        button.onClick.AddListener(OnButtonClick);
    }
    void OnButtonClick()
    {
        Debug.Log("onbuttonclick");
    }
    // Update is called once per frame
    void Update () {
       
    }
}

3.5、Slider

给滑动条Slider添加监听事件。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Script_2 : MonoBehaviour {
    Button button;
    // Use this for initialization
    void Start () {
        //获取到Slider组件
       slider = GameObject.Find(“Slider”).GetComponent<Slider>();
        //添加监听事件
       slider.onValueChanged.AddListener(SliderValueChange);
     }
    //事件响应
    public void SliderValueChange(float value)
    {
        Debug.Log(“value = ” + value);
    }    
   // Update is called once per frame
    void Update () {
       
    }
}

3.6、ScrollBar

滚动条ScrollBar,Scrollbar层级视图当中包含了滑块Handle。
Scrollbar属性:
--Handle Rect :滑动区域。
--Direction :滑动方向。
--Value :滑块当前值。
--Size :滑块大小。
--Number Of Steps :可滑动区域分为几步。
--On Value Changed(Single) :滑块响应事件。


image.png

3.7、Toggle

Toggle为单选框,可以用来创建开关按钮。如下图,层次视图当中包含了显示背景的Background和显示文本的Label。


image.png

Toggle属性如下,其中Group表示当前选中框是否属于某一组选中框,若是的话则所有选中框只能选中一个。
--Is On :交互是否开启。
--Toggle Transition :状态改变过渡效果设置。
--Graphic :选中或取消要显示或隐藏的文本或图片。
--Group :当前选中框是否属于某个组。
--On Value Changed(Boolean) :事件响应。


image.png

3.8、InputField

InputField创建出来如下图,InputField层级视图当中包含Placeholder与Text,
--Placeholder 用于显示占位符,即输入框没有输入文本时显示的文本,例如下图的“Enter text”;
--Text 用于显示输入的内容。
输入框Inputield的具体属性:
--Text :初始文本显示的内容
--Character Limit :字符数量限制。
--Content Type :文本类型。
--Line Type :文本单行显示还是多行。
--Caret Blink Rate :光标闪动频率。
--Caret Width :光标的宽度。
--Custom Caret Color :自定义光标的颜色。
--Selection Color :选中文本时的颜色。
--On Value Changed(String) :文本编辑时触发的事件。
--On End Edit(string) :结束编辑的时候触发的事件。


image.png

3.9、Panel

Panel :面板,功能相当于控制的容器,里面可以存放其他控件。
--作用: 使用Panel控件可以整体移动和处理一组控件。
--设计规范: 一个功能完备的UI界面往往会使用多个Panel控件。
示例: 将资源商店当中的所有分类放在单独一块Panel当中。

4、RectTransform

4.1、RectTransform

RectTransform的作用用来计算UI的位置和大小,RectTransform继承于Transform,具有Transform的所有特征,通过RectTransform能够实现基本的布局和层次控制。
RectTransform当中专有名字:
--Pos X, Pos Y :Pivot与Anchor的距离
--Pivot :中轴,中心点
--Anchor :锚点
--Width&Height :宽与高,相对于锚点
--Left, Right, Top, Bottom :左右上下


image.png

4.2、中心点Pivot

按下T键选中某一个UI控件即可看到UI控件的中心点,中心点也叫中心轴,当鼠标拖动UI控件进行旋转的时候会围绕中心点旋转。
--中心点是矩形的一部分。
--0对应左下角,1对应右上角。


image.png

4..3、锚点Anchor

如图所示,箭头所指即为锚点,锚点表示的是相对于父级矩形的子矩形区域。
如图所示,锚点为四边形,锚点有多种摆放方式,可以为矩形,点状或是为线状。
锚点移动范围仅限于父级视图当中。


image.png

4.4、锚点的四种摆放方式

--锚点呈点状
--锚点与组件本身重合
--锚点跟父物体重合
--锚点呈线状
(1)锚点呈点状: 当UI的锚点为中心点时,不管父控件的大小怎么改变,UI距离锚点的位置固定,大小固定,此时RectTransform(Pos X, Pos Y, Width, Height),其中Pos X与Pos Y分别表示UI中心点到锚点的水平与方向距离。Width与Height是UI的大小。


image.png

(2)锚点与组件本身重合: 当UI的锚点为四方形或者与UI本身大小相同的时候,UI的大小与父控件的大小变换成正比,此时RectTransform(Left, Top, Right, Botton),分别为锚点左,上,右,底 距离UI对应边的距离。


image.png

(3)锚点跟父物体重合: 当UI控件的锚点与父物体重合的时候,不管父物体怎么变化,UI控件四条边相对于锚点四条边的距离保持不变。
image.png

(4)锚点呈线状:
--当UI控件的锚点呈线状并为竖直方向时,则UI控件竖直方向的大小与父物体竖直方向的大小成正比,水平方向大小不变。
--当锚点呈线状并且为水平方向时,则水平方向大小与父物体水平方向的大小成正比,竖直方向大小不变。
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • 尽可能的让UI元素合批 首先创建一个新的场景,摄像camera为Solod Color 然后创建两个Button ...
    qiaoqiao123阅读 1,458评论 0 1
  • GUI:手动布局(GUI类)、自动布局(GUILayout类)。UGUI简介:版本变换 GUI->NGUI->U...
    斗魁阅读 2,345评论 0 5
  • UGUI的目录结构 UGUI包括很多UI工具,但所有的UI工具都会在Canvas(画布)下进行渲染显示。所以当新建...
    紫龙大侠阅读 1,256评论 0 1
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,199评论 0 17
  • Canvas 渲染顺序 遵循刷油漆规则(画家算法) 依次由Render CameraDepth值、Sorting ...
    沉麟阅读 1,318评论 0 0