参考:http://forum.exceedu.com/forum/forum.php?mod=viewthread&tid=33091&extra=page%3D1php
1、Panelweb
一、Alpha属性影响全部在panel下面的widget。因此能够用它来淡出整个窗口ide
二、若是你的UI须要被灯光影响,须要勾选上Normals。性能
三、没有panel全部东西都不可以被渲染出来。若是你对Unity熟悉,你能够把UIPanel当作Renderer学习
四、Panel会根据dimensions自动Clip全部它的子节点。使用这个功能须要选择Clipping下拉列表中的任意选项,以后调整Scene View中紫色矩形的尺寸,就像调整widget的尺寸同样。经过这样作你能够把一个panel放到Scroll View中,让他轻松的拖拽。字体
五、一个动力学Rigidbody会自动增长到你的panel上,由于对于Unity来讲这样会提高性能。移动静态的collider会有不少消耗性能的操做,可是移动rigidbody就不会。spa
2、Cameracode
一、UICamera真正作的事情是发送NGUI事件给全部被当前camera渲染的object,camera是UICamera脚本所在的那个。 其实这个脚本作的事情和UI无关。事实上若是你想让游戏里面的object接收OnPress、OnClick、OnDrag等这类事件,你须要把UICamera挂在你的主相机上orm
二、UICamera的选项Event Type用来决定脚本如何排序mouse或者touch触发的事件。若是是UI模式,这些事件顺序基于widget的depth——和渲染顺序同样。若是UICamera挂到了Main Camera上,那么就须要把这个选项修改为World模式。这样就会根据与相机的距离来排序点击到的object。对象
三、Event Mask用来决定哪些层会接收事件。大多数状况下你须要的就是“Everything”,这个值会与UnityEngine.Camera's Culling Mask进行逻辑与运算,有须要的话你能够微调这个值。若是你修改了UI的game object的Layer,记得调整Event Mask,不然你可能会发现UI不响应事件。
四、Allow Multi-Touch选项用来控制是否支持多点触碰。若是勾选掉,多点触碰也会当作单点触碰。
小贴士
UICamera发送如下事件给collider:
3、UIGrid
一、Arrangement的值决定了子节点的摆放位置。Horizonta让子节点向右排列,Vertical向下排列。
二、Max Per Line属性控制Horizontal排列时候的最大有多少列, Vertical排列的时候最大有多少行。
三、Cell Width和Height决定了全部条目的间隔。
4、UILabel
一、修改Pivot来改变label的对齐方式。Top-left、Left和Bottom-left是左对齐。Top、Center或者Bottom是中间对齐。Top-right、Right、Bottom-right是右对齐。
二、Overflow操做让你决定lable的文本超过容许的空间以后的处理方法。
三、文本能够有shadow或者outlineEffect。shadow会使用两倍的geometry,outline会使用五倍——因此要当心这个属性。Distance参数控制shadow或者outline与原文本的距离,以像素为单位。
四、运行时修改文本,你能够经过如下方法:
UILabel lbl = GetComponent<UILabel>();
lbl.text =
"Hello world!"
;
5、Button
一、Button组件能够挂在任何有collider的game object上。不须要必定挂在widget上。
二、渲染挂着Button组件物体的摄像机,须要有UICamera组件,这样Button的各类事件才能生效,由于全部事件是由UICamera发出的
三、Button接收鼠标hover、press和click事件,而后修改Target属性的颜色。Target一般是widget(sprite、label或者texture),可是也能够是有Light组件的物体,或者是Renderer。
小贴士
一般把Button组件放在按钮的背景sprite上。快捷键ALT+SHIFT+C快速添加collider,以后勾选sprite的”Box Collider“选项,这样box collider就能够自动缩放到和sprite大小同样。
6、UISprite
一、Sprite Type为Filled,这样能够作一个相似冷却的进度条。
二、Sprite Type为Tiled,这样你的sprite会重复的填充一块区域。尽可能不要用过小的sprite由于这样会建立不少的三角形。给你的sprite一个1像素的border也是个好主意,这一个像素会被排除掉(全部tiled的图的边缘看起来就衔接起来同样)。
3、Sprite Type为Sliced就能够建立一个9-slicing的sprite。只有指定了Border后它才会真正起做用。(点击上面提到的Edit按钮)。sliced sprite的一个应用就是作按钮的背景。
四、使用”Make Pixel-Perfect“选项(新版本是Snap)来让UISprite 使用它的原始尺寸。就是若是你的原始texture是300*200的像素,UISprite的dimensions对应的width和height就会调整到这个数值。 注意这个对Tiled和Sliced sprite没有效果——它们有本身的规则。
五、Tiled Sprite会自动平铺到整个精灵的大小内,适合使用无缝贴图制做背景。
六、Sliced Sprite填充完整个的Sprite区域,固定大小,不会随图片大小而改变。(有人说这个适合用来做角色的头像显示)
小结
UIEvents-事件系统
void OnHover (bool isOver):当鼠标移出或者悬停在某个碰撞器上的时候返回布尔值.在触摸设备上不会有做用.
void OnPress (bool isDown):当鼠标或者触摸到碰撞器发生布尔值返回.
void OnSelect (bool selected):当鼠标或者触摸从OnPress发生后的释放将会返回这个布尔值.
void OnClick():和OnSelect的产生条件相同,当点击或触摸碰撞器而且没有发生拖拽时候触发.
void OnDrag (Vector2 delta):当移动鼠标或者触摸按下时候位移超过特定阀值时触发.
void OnDrop (GameObject drag):当鼠标或触摸释放于从发生OnDrag的不一样碰撞器伤触发.传递的参数是产生OnDrag的游戏对象.
void OnInput (string text):当一个OnSelect发生后在同一个碰撞器上触发输入.通常只有UIInput用它.
void OnTooltip (bool show):当鼠标悬停超过tooltipDelay时间后触发该命令.触摸设备上不会有做用.
能够用UICamera.lastCamera找到谁发出的事件,可用UICamera.lastHit获得谁接受这个事件,以及用UICamera.lastTouchPosition获得触摸或屏幕的位置