赞
踩
版本: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 Distance:Camera模式下特有,设置UI离Camera之间的距离;
Sorting Layer:排列的层次,类似处理成Sprite效果;
Order:渲染时的顺序;
Event Camera:World Space特有,决定能处理输入事件的Camera;
Additional Shader Channels:最新几个版本中拥有的特性,提供给Shader使用的参数。
♦ Canvas Scaler 画布缩放
在Canvas组件创建的同时就会创建一个Scaler,用于控制UI的整体缩放效果。一共有三种模式,我们分别来看:
UI Scale Mode:Constant Pixel Size,使用UI的本身像素大小,而不进行任何的缩放;
Scale Factor:整体放大缩小UI画布;
Reference Pixels Per Unit:如果一个精灵设置了Pixels Per Unit,那这里会决定精灵的单位怎么映射回去。
UI Scale Mode:Scale 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 Mode:Constant Physical Size,让UI保持同样的物理大小,而不管屏幕大小和解决方案,该方案与实际屏幕的DPI,也就是每英寸像素(DPI)有关,他会按照实际英寸来显示,感觉很少会用到:
Physical Unit:物理单位;
Fallback Screen DPI:不知道屏幕DPI时的默认DPI;
Default Sprite DPI:默认Sprite会处理的DPI;
Reference Pixels Per Unit:如果Sprite有Pixels Per Unit,则将其于上面的参数相对应。
UI Scale Mode:World,只有在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红宝书,同时补充一下数学知识和英语知识。
至于其他的一些学习只能暂停了,也没有那么精力,等一切有空吧。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。