首页 > Unity3D频道 > 【UGUI研究院】 > UGUI研究院之UI的深度学习(二)
2014
10-23

UGUI研究院之UI的深度学习(二)

今天抽空研究了一下UGUI的深度,UGUI真是好的不得了。以前用NGUI的时候UI的深度就是一个指定的数值,数值越大越靠前,尤其在布复杂界面的时候,深度值不知道怎么填非常恶心。现在有了UGUI这问题即可迎刃而解呀~~如下图所示,B图片在A图片前面,在看看Hieraychy视图,因为A在B的上面,所以优先渲染A,然后是B。那么B就在A的上面了。。

UGUI研究院之UI的深度学习(二) - 雨松MOMO程序研究院 - 1

 

那么我现在想让A图在B图的上面,那么直接在Hierarchy视图里把B拖拽放在A上面即可。

UGUI研究院之UI的深度学习(二) - 雨松MOMO程序研究院 - 2

如果GameObject下面有多个精灵,那么原理是一样的, 优先看父节点在Hierarchys视图中的排序,决定父节点的渲染先后。然后在依次看子节点中的Hierarchy视图的排序。如果还有孙节点一次类推。。这样的话如果没有ABA叠层的情况那么图集永远是一个drawcall.所以在布界面的时候就要花点心思这样drawcall就能节省很多了呢。

如下图所示,在深入一下渲染绘制的顺序

UIMain 和 UINext 是同级目录,因为UINext 在UIMain下面 所以优先渲染UIMain这样UINext将在屏幕最前面。UISub原理一样,由此可得出。

精灵显示从前面的 到后面的排序   NextB > NextA >SubB>SubA>MainA>MainB 。。

UGUI研究院之UI的深度学习(二) - 雨松MOMO程序研究院 - 3

 

布界面的时候我们可以按照这个排序来让我们的drawCall 最小化。可是如果我想运行的时候在两个图之间插一个图该怎么办?脚本如下所示。

transform.SetSiblingIndex 和 GetSiblingIndex就是设置与获取 GameObject在兄弟节点的位置。。

雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

--

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

  1. 文字a,图片b,如果排列方式是abababab那么就是8个drawcall如果游戏中制作列表,动态地添加小物件A,A包含图片和文字,那显然会产生这种排列,那drawcall不是很呵呵了?这个问题该怎么解决?

    • 而且制作的时候,如果界面内容太多,就会分类进行制作,比如A区域,B区域,一个区域一个功能,但这样又会产生混排的问题,哪怕界面就一个图集和一个字体,但实际上的drawCall远不止2个(现在21个了,还没加入列表,加了列表目测上40……),如果为了降低DC而更改UI结构,逻辑上又不好控。我都想把NGUI那套挪过来了……或者用程序重排预制,所有代码控制的界面元素交由一个界面元素数据集控制,但,好麻烦啊……

      • 我要是重排预制,如果要控制某个区域的整体显隐和移动旋转什么的,啊,某区域每个元素都得遍历一遍显隐移动旋转,而且因为原来层级被干掉了,所以现在移动旋转只能换算为世界坐标进行……难道我对transform的控制代码还得改写为对transform所有子孙的操作……这个思路简直让人绝望啊

      • 遇到更诡异的问题了,UGUI层级问题,明明A图片在B图片上面,但就是会被B图片遮蔽。有时候游戏中干了什么操作,比如点击了某个按钮隐藏了部分UI或者干脆是点击了3D部分的内容,UI上某些图片闪烁(其实是他被他下面的图片的挡住了,再点一下又没挡住,简直诡异)我突然灰常怀念NGUI的Depth……虽然设置麻烦,但DC可控,而且没有UGUI这个诡异的bug……

  2. MOMO ,关于UGUI 中 image的 material ,默认是没有材质的吗? 没有材质怎么会画到场景里? 我发现对象里是没有材质的。 并且我也找不到设置 image对应的atlas 所使用的material,这样我就无法更改 换shader。。

  3. 为什么看了你的另外一篇说是要把控件挂到UI的相机下的文章后感觉层级好乱,现在这样多好啊,昨天群里有人给了这样一个图,我还不理解

  4. 布界面的时候我们可以按照这个排序来让我们的drawCall 最小化?这话有点不是很明白我们项目现在采用是UGUI,DrawCall 占用10多个,不是满意的据情况要减少DrawCall,可以控制渲染循序?咋么控制的

  5. 请问下ugui里面事件怎么吞噬,比如两个按钮重在一起,点击时,让两个都执行click事件?还有不规则图形的点击,移动等,我当前是用的collider 2d添加上去做的检测,有没有更方便的办法来处理不规则图形的事件?

  6. 界面结构虽然看起来是简单了,但是一般的都是美术同学来做,然后我们通过fastGUI等工具导成我们需要的界面,总角色这样做界面不是给美术太大的限制就是我们不好重写工具了。

  7. 我反而觉得这样不好,比如说制作者会按功能划分子节点。这样Hierarchys反馈为层次就不好了。特别是涉及批次合并的时候(不知道UGUI有没有这个概念)。NGUI的深度直接看是有点烦,但自己做个工具就好多了。