Unity复习学习笔记(七):NGUI

目录

NGUI是什么

NGUI基础组件

一、Root组件

root有什么用?

Root相关参数

二、Panel组件

[三、Event System](#三、Event System)

四、图集

五、Sprite精灵图片

六、Label控件

七、Texture大图控件

NGUI组合控件

一、Button按钮

二、Toggle组件

三、Input组件

四、Popuplist

五、Slider

六、Scrollbar和Progressbar

七、Scrollview

Anchor

老版本

EventListener和EventTrigger------特殊事件监听

DrawCall

如何降低DrawCall数量

制作UI时降低DrawCall的技巧

NGUI字体

NGUI缓动

模型和粒子显示在UI前

NGUI中显示模型

NGUI中显示粒子特效

其他

[NGUI 事件响应、播放音效](#NGUI 事件响应、播放音效)

NGUI控件和键盘按键绑定

[PC端 tab键快捷切换选中](#PC端 tab键快捷切换选中)

语言本地化


NGUI是什么

NGUI全称:下一代用户界面(Next-Gen UI)

它是第三方提供的Unity付费插件,专门用于执着Unity中游戏UI的第三方工具

相对于GUI它更适用于制作游戏UI功能,更方便使用,性能和效率更高

Unity 插件:是一种基于Unity规范编写出来的程序,主要用于拓展功能,简单理解就是别人基于Unity写好的某种功能代码,我们可以直接用来处理特定的游戏逻辑

NGUI基础组件

一、Root组件

控制分辨率模式自适应的基础

root有什么用?

Root是用于分辨率自适应的根对象,可以设置基本分辨率,相当于设置UI显示区域,并且管理所有UI控件的分辨率自适应

可以简单理解为:它管理一个UI画布,所有的UI都是显示在这个画布上的,它会管理UI画布和不同屏幕分辨率的适应关系

Root相关参数

Flexible:灵活模式

在该模式下,UI都是以像素为基础,100像素的物体无论在多少分辨率上都是100像素

这就意味着,100像素在分辨率低的屏幕上可能显示正常,但是在高分辨率上就会显得很小

Minimum Height:屏幕高小于该值时开始按比例缩放

Maximum Height:屏幕高大于该值时开始按比例缩放

Shrink Portrait UI:竖屏时,按宽度来适配

Adjust by DPI:使用dpi做适配计算,建议勾选

Constrained:约束

该模式下,屏幕按尺寸比例来适配,不管实际屏幕又多大,NGUI都会通过合适的缩放来适配屏幕

这样在高分辨率上显示的UI就会被放大保持原有大小,但有可能会模糊,好处是各设备看到的UI和屏幕比例是一样的

Content Width:按照该宽度值适配屏幕

Content Height:按照该高度值适配屏幕

Fit表示以哪个值做适配

勾选Width:屏幕比例变化时,按照宽度来适配(宽度始终不变)

勾选Height:屏幕比例变化时,按照高度来适配(高度始终不变)

两个都勾选:不会被裁剪,但是有黑边

当适配宽高比大于实际宽高比时,就会按照宽度适配,反之则高度

两个都不勾选:始终保证屏幕被UI填充满,不会有黑边,可能会被裁剪

Constrained On Mobiles:上两种模式的综合体,在PC和Mac等桌面设备上用Flexible模式,在移动设备上用Constrained模式

二、Panel组件

panel的用处:

管理一个UI面板的渲染顺序

管理一个UI面板的所有子控件

参数:

三、Event System

EventSystem的作用:

主要作用是让摄像机渲染出来的物体,能够接收到NGUI的输入事件,大部分设置不需要我们去修改

有了它就可以来响应玩家的各种输入

参数:

四、图集

图集的作用

NGUI中的最小图片控件Sprite要使用图集中的图片进行显示

图集就是把很多单独的小图合并为一张大图,合并后的大图就是图集

目的:提高渲染性能

如何打开图集制作工具

一:Project右键打开

二:上方工具栏NGUI------Open ------Atlas Maker

如何新建图集

在图集工具中创建

图集的关键文件有三:

1.图集文件

2.图集材质

3.图集图片

如何修改删除图集元素

在图集工具中操作增删改。

五、Sprite精灵图片

Sprite的作用:

NGUI中所有中小尺寸的图片显示都是使用的Sprite

使用它来显示图集中的单个图片资源

sprite参数:

公共资源参数:

代码设置图片

css 复制代码
public UISprite sprite;

void Start()
{
    sprite.width = 300;
    //其余都直接点出修改就行
}

六、Label控件

Label的作用

NGUI所有文本显示都使用Label来显示

Label参数

富文本

代码设置Label

如何声明:

只需声明UILabel类即可,其他同Sprite设置参数

七、Texture大图控件

Texture的作用

Sprite只能显示图集中图片,一般用于显示中小图片

如果使用大尺寸图片,没有必要打图集,直接使用Texture组件进行显示

Texture参数

Texture代码设置

cs 复制代码
//在外部声明
public UITexture tex;

//start方法内:
//加载图片
Texture texture = Resource.Load<Texture>("");

//改变图片
if(texture != null)
    tex.mainTexture = texture;

NGUI组合控件

一、Button按钮

所有组合控件的特点

1.在三个基础组件对象上添加对应组件

2.如果希望响应点击等事件,需要添加碰撞器

Button的作用

UI界面中的按钮,当点击按钮后我们可以进行一些处理

制作Button

1.一个Sprite(需要文字再加一个Label子对象)

2.为Sprite添加Button脚本

3.添加碰撞器

Button参数

监听事件的方式

1.拖脚本(方法不能是私有的)

2.代码获取按钮对象监听

cs 复制代码
//声明成员变量
public UIButton button;

//start方法内
button.onClick.Add(new EventDelegate(ClickDo));

public void ClickDo()
{
    print("按钮点击");
}

练习

二、Toggle组件

toggle组件有什么用:单选框、多选框都可以使用它来制作

制作Toggle

1.两个Sprite 一父一子

2.为父对象添加Toggle脚本

3.添加碰撞器

Toggle的参数

监听事件的两种方式

1.拖代码

2.代码进行监听添加

(同button)

练习

三、Input组件

input就是一个输入框,可以用来制作账号密码聊天输入框

如何制作一个Input

1.一个Sprite做背景,一个Label显示文字

2.为Sprite添加Input脚本

3.添加碰撞器

Input参数

监听事件的两种方式

1.拖曳脚本

2.通过代码关联

练习

四、Popuplist

PopupList是一个下拉列表

制作PopupList

1.一个sprite做背景,一个label做显示内容

2.添加PopupList脚本

3.添加碰撞器

4.关联Label做信息更新,选择Label中的SetCurrentSelection函数

参数相关

监听事件的两种方式

1.拖曳代码

2.通过代码添加

练习

五、Slider

Slider是一个滑动条控件,主要用于设置音乐音效大小等内容

制作Slider

1.三个sprite,一个做根对象为背景,两个子对象,一个进度条,一个滑动块

2.设置层级

3.为根背景添加Slider脚本

4.添加碰撞器(父对象或者滑块)

5.关联三个对象

参数相关

监听事件的两种方式

1.拖曳代码

2.通过代码添加

练习

六、Scrollbar和Progressbar

ScrollBar滚动条------一般不单独使用,都是配合滚动视图使用,类似VS右侧的滚动条

ProgressBar进度条------一般不咋使用,一般直接用Sprite的Filed填充模式即可

他们的参数和之前的知识很类似,所以只需了解即可

制作ScrollBar

1.两个Sprite,一个背景一个滚动条

2.背景父对象添加脚本

3.添加碰撞器

4.关联对象

制作ProgressBar

1.两个Sprite,一个背景一个滚动条

2.背景父对象添加脚本

3.关联对象

练习

七、Scrollview

Scrollview:滚动视图,用于编程的VS代码窗口就是典型的滚动视图

游戏中主要用于背包、商店、排行榜等功能

制作ScrollView

1.直接在工具栏创建即可,NGUI------Create------ScrollView

2.如果需要ScrollBar,自行添加水平和竖直

3.添加子对象,为子对象添加Drag Scroll View 和碰撞器

参数相关

自动对齐脚本Grid,参数相关

练习

Anchor

Anchor是用于九宫格布局的锚点

它有两个关键知识点

1.老版本------锚点组件------用于控制对象的对齐方式

2.新版本------3大基础控件自带 锚点内容------用于控制对象相对父对象布局

老版本

主要用于设置面板相对屏幕的九宫格位置

用于控制对象的对齐方式

参数

新版本

用于控制对象相对父对象布局

练习

EventListener和EventTrigger------特殊事件监听

控件自带事件的局限性

目前复合控件只提供了一些常用的事件监听方式,比如:button点击,toggle值变化等等

如果想要制作按下、抬起、长按等功能,利用前面的知识是无法完成的

NGUI事件响应函数

添加了碰撞器的对象,NGUI提供了一些利用反射调用的函数:

经过 OnHover(bool isOver)

按下 OnPress(bool pressed)

点击 OnClick()

双击 OnDoubleClick()

拖曳开始 OnDragStart()

拖曳中 OnDrag(Vector2 delta)

拖曳结束 OnDragEnd()
注:下面两个函数的参数为正在拖曳的对象

拖曳经过某对象 OnDragOver(GameObject go)

拖曳离开某对象 OnDragOut(GameObject go)

等等

例:

cs 复制代码
void OnPress(bool pressed)
{
    if(pressed)
        print("按下");
}

更方便的UIEventListener和UIEventTrigger

他们帮助我们封装了所有的特殊响应函数,可以通过它进行管理添加

1.UIEventListener:适合代码添加

cs 复制代码
public UISprite A;
public UISprite B;

void Start()
{
    UIEventListener listener = UIEventListener.Get(A.gameObject);
    listener.onPress += (obj,isPress) =>{
        print(obj.name + "被按下或者抬起,"+isPress);
    };
}

2.UIEventTrigger:适合Inspector面板的关联脚本添加

Listener更适合代码添加监听,Trigger更适合拖曳对象添加监听

Listener传入的对象更具体,Trigger不会传入参数,我们需要在函数中判断处理逻辑

练习

DrawCall

字面理解DrawCall,就是绘制呼叫的意思,表示CPU(中央处理器)通知GPU(图形处理器-显卡)

DrawCall的概念:

就是CPU(处理器)准备号渲染数据(顶点、纹理、发现、Shader等等)后,告知GPU(图形处理器-显卡)开始渲染(将命令放入命令缓冲区)的命令

简单来说:一次DrawCall就是CPU准备好渲染数据通知GPU渲染的这个过程

如果游戏中的DrawCall数量较高就会影响CPU的效率,最直接的感受就是游戏会卡顿

例:以拷贝文件来进行对比

假设我们创建1w个小文件,每个文件大小为1kb,然后把这些文件拷贝到另一个文件夹中,你会发现,即使这些文件加起来不超过10mb,但是拷贝花费的时间是很长的,如果我们单独创建1个10mb的文件拷贝到另一个文件夹,基本可以瞬间拷贝完毕

为什么会这样呢?

因为每一个文件赋值动作都需要很多额外操作,比如分配内存,创建数据等等

这些操作就会带来一些额外的性能开销

简单理解,文件越多额外开销就越大

渲染过程和上面的例子很类似,每次DrawCall,CPU都需要准备很多数据发送给GPU

那么如果DrawCall越多,额外开销就越大,其实GPU的渲染效率是很强大的,往往影响渲染效率的,都是因为CPU提交命令的速度

如果DrawCall太多,CPU就会把大量时间花在提交DrawCall上,造成CPU过载,游戏卡顿

如何降低DrawCall数量

在UI层面上:小图合大图→即多个小DrawCall变一次大DrawCall

制作UI时降低DrawCall的技巧

通过NGUI Panel上提供的DrawCall查看工具

注意不同图集之间的层级关系

注意Label的层级关系

NGUI字体

NGUI字体的作用

1.降低DrawCall

2.自定义美术字体

制作NGUI字体

NGUI内部提供了字体制作工具

1.根据字体文件,生成指定内容文字,达到降低DrawCall的目的

2.使用第三方工具BitmapFont生成字体信息和图集,通过NGUI字体工具使用第三方工具生成的内容制作字体,达到自定义美术字体

Unity动态字体和NGUI字体如何选择

1.文字变化较多使用Unity动态字体,变化较少用NGUI字体

2.想要减少DrawCall用NGUI字体

3.美术字用NGUI字体

练习

NGUI缓动

什么是NGUI缓动

NGUI缓动就是让控件交互时,进行缩放变化、透明变化、位置变化、角度变化等等行为

我们可以通过使用NGUI自带的Tween功能来实现这些缓动效果

使用NGUI缓动

1.关键组件 Tween缓动相关组件

2.关键组件 Play Tween可以通过它让该对象和输入事件关联

Tween参数

Play Tween参数

练习

模型和粒子显示在UI前

NGUI中显示模型

方法一:

使用UI摄像机渲染3D模型

1.改变NGUI的整体层级为UI层

2.改变主摄像机和NGUI摄像机的渲染层级

3.将想要被UI摄像机渲染的对象层级改为UI层

4.调整模型和UI控件的Z轴距离

方法二

使用多摄像机渲染 Render Texture

NGUI中显示粒子特效

1.让Panel和例子特效处于一个排序层

2.再粒子特效的Render参数中设置自己的层级

其他

NGUI 事件响应、播放音效

PlaySound脚本

NGUI控件和键盘按键绑定

KeyBinding脚本

PC端 tab键快捷切换选中

KeyNavigation脚本

语言本地化

Localization脚本

1.在Resources下创建一个txt文件,命名必须为Localization

2.配置文件

3.给想要切换文字的Label对象挂载Localize 关联key

4.给用于切换语言的下拉列表下添加脚本LanguageSelection

练习

相关推荐
行业探路者2 小时前
网站二维码的全解析与使用技巧分享
大数据·人工智能·学习·产品运营·软件工程
晨欣2 小时前
[eBPF硬核] Gemini阿吉学习笔记:Tetragon企业版两类核心日志 & 冷热数据分流架构设计 & 学习资源推荐
笔记·学习·云原生·云安全·ebpf·谷歌gemini
草莓熊Lotso2 小时前
Python 流程控制完全指南:条件语句 + 循环语句 + 实战案例(零基础入门)
android·开发语言·人工智能·经验分享·笔记·后端·python
zore_c2 小时前
【数据结构】队列——超详解!!!(包含队列的实现)
c语言·网络·数据结构·c++·笔记·算法·链表
Vizio<2 小时前
STM32HAL库开发笔记-系统定时器与中断闪灯
笔记·stm32·单片机
老朱佩琪!2 小时前
Unity适配器模式
unity·设计模式·游戏引擎·适配器模式
لا معنى له7 小时前
目标检测的内涵、发展和经典模型--学习笔记
人工智能·笔记·深度学习·学习·目标检测·机器学习
石像鬼₧魂石9 小时前
内网渗透靶场实操清单(基于 Vulhub+Metasploitable 2)
linux·windows·学习·ubuntu
flying robot10 小时前
centos7系统配置
笔记