Unity3D 官方文档 UGUI的总览 Canvas和EventSystem的认识

来源:互联网 发布:ug怎么编程 编辑:程序博客网 时间:2024/05/22 02:03

版本:unity 2017.1  语言:C#

 

总起:

NGUI和UGUI都有在用,不过我最常用的还是UGUI,相比而言UGUI的实现更加简洁一些易于上手。

 

NGUI的有些方面感觉做的冗余了,不过NGUI的好处是开源,有什么功能不够的地方可以自行更改,而且NGUI提供的功能比UGUI完善的多。

 

个人喜欢用UGUI,功能不够的去扒NGUI的代码做实现。

 

UI的组件会比较多,有一些冷门的、简单的,我就介绍一下,不展开说明了。

 

Canvas 画布:

如果场景中不存在Canvas对象,新建任意的UI组件时就会创建Canvas,并且会新建一个EventSystem对象用于捕捉UI的各种事件。

 

UGUI有一点做的不是很好,他的渲染顺是按照Hierarchy窗口下的排列顺序的,不像在Sprite Renderer中有Sorting Layer和Order in Layer去排列Sprite的渲染顺序。所以需要使用Transform中的SetAsFirstSibling、SetAsLastSibling、SetSiblingIndex三个方法控制节点的排列。

 

在介绍Canvas组件之前,先来介绍UI中特有的Transform。

 

RectTransform

从继承关系上来讲RectTransform是Transform的子类,所以RectTransform拥有Transform的所有特性。

 

3D模型上我们调整大小都是使用Scale属性,UI也可以,不过一个更好的解决方案是在Scene窗口下按下T快捷键调整其Width和Height。



Pos(X, Y, Z):组件上Pivot的点相对于锚点的位置;

 

Width/Height:组件矩形的宽高;

 

Left、Top、Right、Bottom:位置相对于各个边的位置,只有锚点选择Anchor Presets中的周围一圈时会显示;

 

Anchors:锚点,锚点有四个三角形,当四个三角形聚集在一起时,就是普通的锚点,但是当分开时,Rect根据锚点之间分开的距离随着画布的放大缩小而变化(该功能足以模拟画布缩小放大时,比例不变的效果,就是有点麻烦);

 

Pivot:轴点,这个东西吧,应该是cocos中的锚点,而且普通的Transform缺少这个功能感觉很遗憾;

 

Rotation:旋转的角度;

 

Scale:放大缩小的比例,值可以为负。

 

Canvas 画布



Render Mode:画布的模式,一共有三种:

    1.Screen Space - Overlay,就是直接显示在所有场景的最前面;

    2.Screen Space - Camera,相机空间的UI显示。Plane Distance设置为相机near的值就是Overlay效果,设置为far就会显示在所有的物体的后面,当然Render Camera不能留空,留空就是Overlay效果,顺便还支持3D效果;

    3.World Space,世界空间,可以当作一个普通的游戏对象在场景中进行处理。

 

Pixel Perfect:勾选不启用抗锯齿;

 

Render Camera:Camera模式下特有,不要留空,否则就是Overlay模式;

 

Plane DistanceCamera模式下特有,设置UI离Camera之间的距离;

 

Sorting Layer:排列的层次,类似处理成Sprite效果;

 

Order:渲染时的顺序;

 

Event Camera:World Space特有,决定能处理输入事件的Camera;

 

Additional Shader Channels:最新几个版本中拥有的特性,提供给Shader使用的参数。

 

Canvas Scaler 画布缩放

Canvas组件创建的同时就会创建一个Scaler,用于控制UI的整体缩放效果。一共有三种模式,我们分别来看:

UI Scale ModeConstant Pixel Size使用UI的本身像素大小,而不进行任何的缩放;

 

Scale Factor:整体放大缩小UI画布;

 

Reference Pixels Per Unit:如果一个精灵设置了Pixels Per Unit,那这里会决定精灵的单位怎么映射回去。

 

UI Scale ModeScale With Screen Size根据屏幕的尺寸进行放大缩小,最常用的一种模式,让我们上一张图来看看:



Reference Resolution:设置处理的屏幕分辨率;

 

Screen Match Mode:当前分辨率如果不匹配处理分辨率时会如何处理:

    1.Match Width or Height,根据宽或者高来缩放,这个是比较坑的地方,它不能宽按照宽来缩放,高按照高来缩放,NGUI是可以的;

    2.Expand,扩展会使最大的一条边来进行缩放,所以UI的覆盖大小会永远大于等于屏幕大小;

    3.Shrink,使用最小的一条边来缩放,所以UI的覆盖大小会永远小于等于屏幕大小。

 

Match:Match Width or Height模式下宽和高所占的比例;

 

Reference Pixels Per Unit:同上。

 

UI Scale ModeConstant Physical SizeUI保持同样的物理大小,而不管屏幕大小和解决方案,该方案与实际屏幕的DPI,也就是每英寸像素(DPI)有关,他会按照实际英寸来显示,感觉很少会用到:

 

Physical Unit:物理单位;

 

Fallback Screen DPI:不知道屏幕DPI时的默认DPI;

 

Default Sprite DPI:默认Sprite会处理的DPI;

 

Reference Pixels Per Unit:如果Sprite有Pixels Per Unit,则将其于上面的参数相对应。

 

UI Scale ModeWorld,只有在Canvas在设置为World Space模式下会使用,不过参数也就调整一些单位转换,就不多说了。

 

Graphic Raycaster 

严格的来说这个不算是Canvas的组件,不过在创建Canvas它会同时创建,所以介绍一下,这个是Canvas上用于射线获取图形的行为。

 

Ignore Reversed Graphics:是否忽略反转的图形;

 

Blocked Objects:会被检测的对象;

 

Blocking Mask:会被检测对象的Mask。

 

Canvas Group 画布组

可以通过该组件控制整个Canvas的行为,例如透明度、是否接受玩家输入、Raycasts功能。这是个好东西啊,但需要手动来创建,默认并不会创建该组件。



Alpha:嗯,透明度,整体控制可以实现淡入淡出效果;

 

Interactable:当前Canvas是否会接受输入事件;

 

Blocks Raycasts:Canvas的Raycast的效果是否起作用,但它不会应用于Physics.Raycast;

 

Ignore Parent Groups:是否忽略父节点的Group设置。

 

Canvas Renderer

所有可视的UI组件都会拥有的组件,表明属于一个Canvas,没有任何属性,不过有一些参数可以通过脚本进行调整。

 

EventSystem:

跟随Canvas一起创建的EventSystem,主要用于处理玩家的事件输入。

 

Event System



First Selected:首选的GameObject,进入游戏后第一选择目标的输入框是哪个;

 

Send Navigation Events:是否发送导航事件;

 

Drag Threshold:拖拽的事件的灵敏度,越低越灵敏。

 

Standalone Input Module 输入控制模块



Horizontal Axis、Vertical Axis、Submit Button、Cancel Button:设定为Input Manager中的对应值;

 

Input Action Per Second:每秒能输入的次数;

 

Repeat Delay:重复输入的延迟;

 

Force Module Active:是否强制使用该组件。

 

个人:

这个官方文档系列主要还是记录一些基本用法的同时,让自己游览一遍整个Unity。Graphics、Physics、Scripting等前面的一些重要内容都是会做的,有一些内容多的更新篇幅也比较长。

 

这两天除了在看Lua以外,也在研究元编程,并且希望能上手一个实际项目。等这个阶段过了,我想要重新翻开《3D游戏编程大师技巧》和OpenGL红宝书,同时补充一下数学知识和英语知识。

 

至于其他的一些学习只能暂停了,也没有那么精力,等一切有空吧。


阅读全文
0 1
原创粉丝点击