NGUI之UIPanel

原文:http://www.tasharen.com/forum/index.php?topic=6705.0

概述

UIPanel用来收集和管理它下面所有widget的组件。通过widget的geometry创建实际的draw call。没有panel所有东西都不能够被渲染出来。如果你对Unity熟悉,你可以把UIPanel当做Renderer。

所有panel都有一个Depth值,会影响所有它包含的widget。如果你的UI有很多窗口,那么最好每个窗口有一个panel。Panel上的depth权重会远远高于每一个widget的depth权重,所以保证panel不要使用同样的depth。如果使用同样的depth在panel上,那么draw call会被自动拆分来保证渲染顺序,所以会增加更多的draw call。

  • Alpha属性影响所有在panel下面的widget。所以可以用它来淡出整个窗口。
  • 如果你的UI需要被灯光影响,需要勾选上Normals。
  • 如果创建了一个有很多geometry的scrollable panel,你需要勾选Cull选项来减少三角形的数目。这样也可能降低性能,因为widget的可视性需要每次update都检验一次。
  • 勾选Static选项来告诉NGUI这个panel下面的widget不会被移动,这样可以提高性能。NGUI会忽略所有的position/rotation/scale改变。所以在运行时移动widget不会有效——所以小心使用。
  • 如果要调试由panel创建的draw calls,Show All选项可能帮助到你。你会看到由panel创建的所有draw call,以渲染顺序排序。每个draw call会包括它使用到material的详细信息,那个widget用的这个material,甚至可以让你关闭某些draw call来让你查询某些问题。

Panel会根据dimensions自动Clip所有它的子节点。使用这个功能需要选择Clipping下拉列表中的任意选项,之后调整Scene View中紫色矩形的尺寸,就像调整widget的尺寸一样。通过这样做你可以把一个panel放到Scroll View中,让他轻松的拖拽。

注意clipping的panel不能嵌套。每个panel只能clip自己管理的widget,如果一个panel在另外一个panel里面,只有一个会影响到里面的widget。这个限制以后会去掉。

默认NGUI中panel的Render Queues从3000开始往上增加。你可以通过Render Q来修改。如果你想在两个panel中间增加粒子,只要修改两个panel的render queue一个高于粒子,一个低于粒子即可。如果想要让所有的draw call使用和NGUI 2.x版本的渲染方式一样,使用z轴而不是depth。那么给panel的Render Q指定为Explicit。(NGUI 2.x用的是3000)。

如果你找和Anchors相关的文档,可以看基类——UIRect。

小贴士

一个动力学Rigidbody会自动增加到你的panel上,因为对于Unity来说这样会提升性能。移动静态的collider会有很多消耗性能的操作,但是移动rigidbody就不会。

时间: 2024-11-08 23:51:56

NGUI之UIPanel的相关文章

Disable掉NGUI的UIPanel会引起UISprite产生异常开销

摘要 5月27日发现机库界面在设备上有明显卡顿的情况,检查后发现UISpirte.Update有异常的性能开销,下图所示: 影响范围 为了Profile,在UISprite.Update中加入了如下Profile代码 结果如下: 结论: 的确有的界面在每帧把mChanged设置为true!,而且这部分是性能的罪魁祸首 Deactivate掉AcheivementUI(Clone)后 Deactivate掉QuestPanelMoveRoot后 剩余的开销大的UISprite基本就散落在UI各处了

Unity+NGUI性能优化方法总结

一共9招. 1 资源分离打包与加载 游戏中会有很多地方使用同一份资源.比如,有些界面会共用同一份字体.同一张图集,有些场景会共用同一张贴图,有些会怪物使用同一个Animator,等等.可以在制作游戏安装包时将这些公用资源从其它资源中分离出来,单独打包.比如若资源A和B都引用了资源C,则将C分离出来单独打一个bundle.在游戏运行时,如果要加载A,则先加载C:之后如果要加载B,因为C的实例已经在内存,所以只要直接加载B,让B指向C即可.如果打包时不将C从A和B分离出来,那么A的包里会有一份C,B

NGUI 2DCamera和3DCamera共存的解决方案

主要解决问题是面板里含有3D模型,如果只有1个正交相机,3D模型的显示质量会很差.如果只用透视相机,UI会变形 NGUI官方的例子是使用2个UI Root,再创建一个Camera,把模型渲染到面片上.但这样有点复杂,并且对于移动平台消耗过高,也不适合一个面板一个prefab的形式 测试了一阵子,现在我个人比较好的解决方法是:只使用一个UI Root,UIRoot层级下包含2个Camera,Camera2D和Camera3D.3D相机的渲染深度比2D相机低一级. 分别用NGUI,NGUI3D两个L

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

目录 1.介绍两大UI插件NGUI和UGUI 2.unity渲染顺序控制方式 3.NGUI的控制 4.UGUI的控制 5.模型深度的控制 6.粒子特效深度控制 7.NGUI与模型和粒子特效穿插层级管理 8.UGUI与模型和粒子特效穿插层级管理 写在前面 这篇笔记是整理了之前做的记录,在做项目的过程中,遇到了各种各样的界面穿插问题,界面层级混乱,比如,手机卡了或点快了,就导致两个界面相互交叉.对于界面,这应该算是一个很严重的bug,很大部分原因是整个UI框架没有从整体上考虑这个,后来决心弄清楚层级

NGUI中穿插粒子或者mesh渲染层级

在项目中由于特效的层级与NGUI UI的层级不太还规范,导致特效的渲染层级较为杂乱于是就想把特效层级与NGUI的层级管理混合在一起: 在修改之前首先要了解NGUI的层级管理以及DC的合并: 在NGUI中层级的管理以及Drawcall的合并都是由UIPanel这个组件来完成的:在NGUI中UIpanel就相当于UGUI中canvas和canvasrender,在UIpanel中会维护两个队列分别是UIWidget和UIDrawcall的队列并按照深度排序: 每当该UIPanel下有UIWidget

NGUI: UIPanel控件

转自:http://blog.csdn.net/huang9012/article/details/19411703 http://bbs.9ria.com/thread-417659-1-1.html NGUI官方文档:http://tasharen.com/ngui/docs/annotated.html 概述 UIPanel用来收集和管理它下面所有widget的组件.通过widget的geometry创建实际的draw call.没有panel所有东西都不能够被渲染出来.如果你对Unity

NGUI 渲染流程深入研究 (UIDrawCall UIGeometry UIPanel UIWidget)

上图是一个简要的NGUI的图形工作流程,UIGeometry被UIWidget实例化之后,通过UIWidget的子类,也就是UISprit,UILabel等,算出所需的Geometry缓存(顶点数,UV,Color,法线,切线). 而UIPanel,通过遍历自己子类下所有的UIWidget组件(已经按深度排序),先创建一个UIDrawCall,把Widget的material,texture,shader对象传递给该UIDrawCall,然后把该Widget里的Geometry缓存传给UIDra

NGUI所见即所得之深入剖析UIPanel,UIWidget,UIDrawCall底层原理

NGUI所见即所得之深入剖析UIPanel,UIWidget,UIDrawCall底层原理 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处:http.dsqiu.iteye.com 之前项目中用的NGUI的版本是3.0.7 f3,开始的时候感觉没有什么问题,直达最近项目UI的完成度比较高时,就突然出现掉帧很严重的现象,即使只有一个UI打开(其他都是active = false的情况下),打开profier,发现UIPanel LateUpdate 竟然占了CPU使用率的50%左右

Unity NGUI UIPanel下对粒子或自定义Mesh的剪裁

写在开篇: 越来越烦那些无脑转发自己不做验证的博主论坛楼主,网上好不容易找到一些资料,结果代码搞下来却是错的,有些确实是因为版本问题太老不兼容,但是有些明显是有问题的,转发前自己试试就知道肯定是不能用的.结果...哎...真是不想说啥了. 这次是在小地图中画线画圈,用到了动态绘制Mesh,小地图需要对这些线进行裁切,所以去网上搜了一篇叫做<Unity NGUI UIPanel下对粒子的剪裁>的文章.当然还是感谢一下原作者提供的思路.我这里对这篇文章中涉及到的代码进行了优化改动,使之可以使用.没