Unity NGUI和UGUI与模型、特效的层级关系

1、介绍两大UI插件NGUI和UGUI 2、unity渲染顺序控制方式 3、NGUI的控制 4、UGUI的控制 5、模型深度的控制 6、粒子特效深度控制 7、NGUI与模型和粒子特效穿插层级管理 8、UGUI与模型和粒子特效穿插层级管理

写在前面

这篇笔记是整理了之前做的记录,在做项目的过程中,遇到了各种各样的界面穿插问题,界面层级混乱,比如,手机卡了或点快了,就导致两个界面相互交叉。对于界面,这应该算是一个很严重的bug,很大部分原因是整个UI框架没有从整体上考虑这个,后来决心弄清楚层级的控制,并把一些对于目前项目可行的方法应用,界面穿插的问题少了很多,注意我只是在现有的框架打的补丁。如果是一个从头开始,在架构UI的时候,这篇笔记应该会很有用。

以前项目使用的NGUI插件,UI是有一个人摆放的,我们客户端就拿到这些prefab,添加相应的逻辑脚本。但恰恰是这个摆界面的人也没有注意界面的层级,各个panel、各个weight的depth没有统一管理,导致开发中后期,界面一多起来,很多界面同时出现的时候,panel和weight的层级就乱了。

unity有哪些GUI框架

unity自带的GUI系统 一般都不用它来开发游戏,作为拓展unity编辑器开发比较多,unity自带的GUI效率非常低,每次渲染都是一个DrawCall,不好用,不能做到所见即所得。

unity4.6之后的UGUI UGUI是NGUI作者参与开发的,unity官方的新UI系统,感觉挺好用的,至于效率问题应该比NGUI好些。5.x以后ugui有很大的提升,以后ugui应该会逐步替代ngui。 很早之前就尝试过这套ugui系统,正是我在研究界面层级的时候,用NGUI显示模型粒子特效没有找到好的方法时,于是探索了ugui,具体怎么控制层级,后面会讨论。

NGUI 是一个老牌的unity UI插件了,在ugui没有推出之前,大部分unity的游戏都使用的NGUI插件开发UI,它的好处很多,提供了常见的UI控件,实现几乎所有需要的功能,在效率上也是控制严谨,DrawCall合并极大提升了控件渲染效率,还支持3D GUI。但是也有很多不足,版本更新太频繁,版本bug很多,对于了解NGUI的开发者可以很好利用它,但对于初学者来说,NGUI固然容易上手好用,但是对DrawCall的重建规则不了解,仍然会效率低下(后面会整理一下分析NGUI的笔记)。

FairyGUI 最近发现的一款跨平台UI编辑器,组合各种复杂UI组件,以及为UI设计动画效果,无需编写代码,可以一键导出Unity,Starling,Egret, LayaAir,Flash等多个主流应用和游戏平台。

特性: 所见即所得。操作简易,使用习惯与Adobe系列软件保持一致,美术设计师可以轻松上手。 在编辑器即可组合各种复杂UI组件,无需编写代码。不需要程序员编码扩展UI组件。 强大的文本控件。支持动态字体,位图字体,以及BMFont制作的位图字体,支持HTML语法和UBB语法,支持图文混排。 强大的列表控件,支持多种布局,支持虚拟列表和循环列表,即使列表项目数量巨大也拒绝卡顿。 支持图片的九宫格和平铺处理,支持图片变色和灰度,支持序列帧动画编辑和使用。 内置手势支持。 提供时间轴设计UI动效,可实时看到每帧的位置或其他效果。 编辑状态下使用分散的素材,发布时自动打包图集。支持定义多个图集,自动支持抽出A通道的压缩方式。 多国语言支持。 各种分辨率自适应。 提供插件机制,可以根据项目的需要为编辑器加入个性功能。 为各个游戏平台提供了一致的API,得益于编辑器强大的编辑功能,程序员只需要了解少量API就能完成UI展现,相比Feathers, NGUI, UGUI等UI框架,FairyGUI提高了UI制作效率,降低了成本。

当然不止这些,还有许多UI框架,比如:Daikon Forge GUI、EZ GUI、2dTookit等等,有时间可以看看,但目前主要用到的还是NGUI、UGUI啦。

为什么要关心渲染顺序?

如果是2D游戏,渲染顺序关系着每个层次的显示先后,比如UI在游戏内容前面,游戏内容又有多层次。举一个简单的例子,在横版2D游戏中,经常会用到多层滚动的背景,把游戏物体分层管理起来,可以有效的减少出错几率,很好的控制显示效果。

对于3D游戏,游戏内容是3D的,UI一般是2D,有很多时候需要把某个模型啊,粒子特效啊,放在界面上,这样就有一个问题,3D物体和2D界面的先后关系,比如有些界面是在模型之上的,有些在下面,尝试过很多种办法,都能实现需求,但不是每种办法都是那么舒服的。

unity中控制渲染顺序的方式

Camera Camera是unity中最优先的渲染顺序控制。depth越大,渲染顺序越靠后。

sortingLayer 和 sortingOrder 对于这个属性,我也是云里雾里的,不是太明白。按照字面意思是层的排序,Canvas和Renderer都有这个属性,unity官方就一句话带过。优先级仅次于Camera的depth。

看网上的博客,一般都写着sorting layer是比Camera低一层级的控制渲染顺序的属性。然后我做了很多尝试,发现并不是所有Renderer组件这个属性作用,根据尝试的结果,做如下总结:

Canvas中的sorting layer可以控制Canvas的层级,这是ugui中的东西,下面会讨论的;

GameObject中的renderer属性就是挂在该GameObject的Renderer组件,Renderer是渲染组件的基类,下面有多个派生类,经过测试,目前知道的只有SpriteRenderer的sorting layer和sorting order能控制渲染顺序。所以我也觉得,sorting layer和 sorting order就是unity 对2D游戏所支持的吧;

renderer组件有如下几类:

RenderQueue 这是unity中的一个概念,(至少之前在opengl中没听过),大致意思就是渲染顺序,那无疑就是控制渲染顺序的嘛。

所以一般设置材质的renderQueue或直接在shader中设置。

在ShaderLab中,有4个提前定义好的render queue,你可以设置更多的在他们之间的值:

它不同于旅游,那需要一个风景稍微漂亮的地方,

Unity NGUI和UGUI与模型、特效的层级关系

相关文章:

你感兴趣的文章:

标签云: