NGUI的UIRoot、UICamera、UIPanel、UIRect、UIWidget、UITexture、UISprite、UILabel、Scroll View等

用NGUI也有几个月了,但一直没有系统性地学习过NGUI,今天来了解下~

1.UIRoot

UIRoot通常使用2/ScreenHeight缩放它自身,ScreenHeight在Fixed Sizeof Height模式下可自定义。
更多关于UIRoot的知识请见:https://blog.csdn.net/kakashi8841/article/details/20480717

2.UICamera

UICamera脚本实际做的事是发送NGUI事件给所有被它所附加的摄像机所看见的对象,类似于UGUI里的EventSystem吧。
更多关于UICamera的知识请见:https://blog.csdn.net/kakashi8841/article/details/20548429

3.UIPanel

管理它下面所有挂件并负责创建Draw Call(后文简称DC)。如果没有Panel,没有任何东西能被绘制出来,可以把UIPanel看成是一个Renderer。Panel的数量要尽可能地少,不可滥用Panel,通常的做法是每个窗口有一个UIPanel。UIPanel能用于裁剪显示的范围,调整场景视图中紫色的矩形的大小即可。

Show Draw Calls按钮能让你看到:由当前选中的UIPanel(以及场景中的所有Panel)创建的所有DC。DC是由UISprite使用的图集(UIAtlas)、UILabel使用的字体材质(UIFont)、UITexture使用的材质产生的。
举例1,一个使用了图集的UISprite,就是一个DC,对应一个RenderQ(从3000开始+1递增)。
举例2,在同一个UIPanel下的两个UISprite使用的是同一个图集,如果这两个UISprite的Depth不相等,那就是两个DC,对应两个RenderQ;如果相等,就是一个DC,对应一个RenderQ。
举例3,在Depth相等的两个UIPanel下的Depth相等的两个UISprite使用同一个图集,也是两个DC,对应两个RenderQ。因为为了保证绘制顺序,不同UIPanel肯定不能是同一个RenderQ,所以这样的两张图在绘制时也会被自动改成不同的RenderQ。

另外,子节点上的UIPanel不受父节点的UIPanel管理,父节点上的UIPanel的作用域如下图画线区域:
在这里插入图片描述
更多关于UIPanel的知识请见:https://blog.csdn.net/kakashi8841/article/details/20641375

4.UIRect(非实体组件)

UIRect是所有Widgets和Panels继承的基础组件,是一个抽象类,不是一个实体组件,也就是锚点Anchors。如下图,选择Unified只会给你选择一个固定对象,Advanced则可以为每边选择或不选择一个固定对象。为了固定一个挂件(Widget),把它移到一个想要放置的位置,并拖放一个你想要它固定到的目标到选项上。anchor的值就会被自动填充。
在这里插入图片描述 在这里插入图片描述
更多关于UIRect的知识请见:https://blog.csdn.net/kakashi8841/article/details/20942833

5.UIWidget

UIWidget是一个基础UI组件,是容纳其它组件的理想容器,是一个你能在屏幕上随意定位的矩形,但运行时是看不到的。
UIWidget通常是所有被绘制的NGUI元素的基类,UILabel,UISprite,UITexture和UI2DSprite类都从UIWidget继承。
另外,你可以在场景视图的挂件上右键,然后选择“Select”,你将看到位于鼠标下方的挂件列表,他们按绘制/接受事件的顺序,自顶向下排列。
更多关于UIWidget的知识请见:https://blog.csdn.net/kakashi8841/article/details/20949011

6.UITexture

如下图,可以直接把图片拖到UITexture里,也就是指定一个Texture用于绘制。如果你指定了材质,它才会使用材质的Main Texture,否则将使用你上面指定的Texture。
在这里插入图片描述
更多关于UITexture的知识请见:https://blog.csdn.net/kakashi8841/article/details/21284429

7.UISprite

所有的Sprite需要你先创建一个图集Atlas。点击Sprite选项旁边的Edit按钮来编辑Sprite,例如,能给你的Sprite增加Border使得它能成为一张九宫格的图(用九宫格的图之前记得修改UISprite的Sprite Type的类型为Sliced)。
更多关于UISprite的知识请见:https://blog.csdn.net/kakashi8841/article/details/21284551

7‘.什么时候用UITexture,什么时候用UISprite

如果UISprite用到某个图集里的一张图,那么,用到的这个图集将会打进包(虽然该图集里很多图都没被用到),这种情况用UITexture就好一些,用到哪张图就会将这张图自动引用进包。

扫描二维码关注公众号,回复: 11599501 查看本文章

8.UILabel

注意点:
1.Overflow处理让你决定当label的text超过允许长度的时候应该怎么处理。
2.可以让你的文本有阴影或外边框效果:
在这里插入图片描述
更多关于UILabel的知识请见:https://blog.csdn.net/kakashi8841/article/details/21284611

9.Scroll View

有UIScrollView和UIDragScrollView这两种,一起使用用于实现滑动器,如下图就是一个滑动器的层次结构:
在这里插入图片描述
1.UIScrollView要和UIPanel同时存在于一个物体上,比如上图的Content1,Content1的详情如下图:
在这里插入图片描述
UIScrollView在处理回弹的时候,会自动将SpringPanel(如上图)设为true,复位后自动变为false;也可以主动将SpringPanel设为true来实现主动回弹,代码实现举例:SpringPanel.Begin(XXXGameObject, Vector3.zero, 5);,Begin里将SpringPanel的enabled设为true
2.UIWrapContentEx.cs要挂在上图的WrapExContainer上,用于规定滑动器里Item的大小等信息
在这里插入图片描述
当然也可以不用UIWrapContentEx,而是用UIGrid,区别是UIWrapContentEx可以循环利用Item;UIGrid只能一次性把Item加载完,不能循环利用。Item数量不多的时候,建议用UIGrid,UIGrid的介绍在下方。
3.UIDragScrollView要和BoxCollider同时存在于一个物体上,UIDragScrollView的作用:先FindScrollView,再调用UIScrollView的Drag、Press、Scroll函数。例如,一个含有多个Item的滚动列表,列表里的所有Item都要加上UIDragScrollView和BoxCollider。

更多关于Scroll View的知识请见:https://blog.csdn.net/kakashi8841/article/details/23628961

10.UIGrid

排列一些item到固定大小的格子中
用法:先在Gird里摆好item(如下图)
在这里插入图片描述
再点击Execute(如下图),就能在UnityEditor里将item们排列好了
在这里插入图片描述

11.Animator和UIPlayAnimation

情况1: 如果一个物体上只挂了Animator组件,如下图
在这里插入图片描述
在运行时,界面的Enable为true时,就会自动执行该Animator里放的animation,如下图
在这里插入图片描述
情况2: 如果一个物体上同时挂了Animator组件和Animation组件,且Animation的Enable为true,如下图
在这里插入图片描述在这里插入图片描述
这样就可以通过代码来控制播放哪个Animation了,如下图Lua代码,指定了播放哪个Animation以及其他一些参数
在这里插入图片描述

12.其他一些UI组件简介

其他常用的组件还有:按钮UIButton、开关或复选框UIToggle、可拖动的滑动条UISlider、进度条UIProcessBar、播放动画UIPlayAnimation(和ActiveAnimation.cs一起用,ActiveAnimation.cs用于在动画播完后调用UIPlayAnimation.cs的OnFinished回调,Notify the target when the animation finishes playing.)。
https://blog.csdn.net/kakashi8841/article/details/23627601

猜你喜欢

转载自blog.csdn.net/BillCYJ/article/details/102729643