NGUI -- UIPanel

注意:本文翻译时NGUI版本已经更新到3.0.7

原文地址:http://www.tasharen.com/forum/index.php?topic=6705

总览

UIPanel是一个保存并管理它下面所有挂件的组件。UIPanel负责通过挂件的几何结构创建真正的draw call。如果没有Panel,没有任何东西能被绘制出来。如果你熟悉Unity,你可以把UIPanel看成是一个Renderer。

UIPanel继承了它的子类UIRect所有功能。

NGUI -- UIPanel_第1张图片

所有Panel都一个Depth值影响着他下面的所有挂件。如果你正在创建一个使用多个窗口的复杂UI,通常最好的做法是每个窗口有一个UIPanel。请确认你的panel不会拥有相同的depth值。如果这个值是一样的,为了保证绘制顺序,draw call将会开始频繁分割,这将导致产生比平常更多的draw call。

  • Alpha 属性影响它下面的所有的挂件。用它来实现整个窗口的淡出是不错的方式。
  • 如果你的UI受灯光影响,请确认你勾选了Normals复选框
  • 如果你正在创建一个可滚动的panel,它里面有大量几何图形,你可能应该勾选Cull选项去减少三角形面数。注意这么做实际可能会降低性能,因为它会在每个update都检查挂件的可见性!
  • 勾选Static复选框会告诉NGUI这个Panel下面的挂件不需要移动从而提高性能。NGUI会忽略检查position/rotation/scale的变化。注意这么做意味着在运行时移动挂件不会有任何效果——不过还是要注意。
  • 如果你想要调试panel创建的draw call,Show All选项会帮到你。这么做将让你看到由NGUI Panel创建的所有draw call。每个draw call显示的详细信息包括了使用的材质,由哪个挂件产生的,设置让你选择draw call关闭来帮助你观察会发生什么。
Panel能根据你使用的大小自动裁剪所有的孩子。为了允许裁剪,请从Clipping的下拉框中选择一个选项,然后根据你想要的挂架大小来调整场景视图中紫色的矩形的大小。如果那样做了,你能把panel编程一个Scroll View并很简单让它变成可拖动的。
注意panel的裁剪不支持嵌套。每个panel只能裁剪它管理的孩子结点,如果你里面还有一个clipped的panel,他们之间只有一个能影响挂件。这个限制可能在未来会被移除。

默认上,NGUI所有的Panel将使用一个值为3000和以上的渲染队列来绘制。你可以通过在Render Q下拉列表来做一些改变。如果你想要在你的两个panel之间增加一个粒子系统,只要简单确保你第一个panel的render queue比被用于粒子系统的材质的低,第二个比粒子系统的高。如果你想让像NGUI 2.x所有的draw call是基于Z轴而不是基于depth,指定一个明确的Render Queue(3000是NGUI2.x使用的)

如果你正在寻找关于Anchors部分的文档,你能在他的基类 -- UIRect中找到。


Pro-Tip

一个Kinematic的Rigidbody会自动加到你的Panel里面,因为根据Unity,这会极大提升重物理游戏的性能。移动静态collider是一个很耗时的操作,而移动rigidbody却不会。


类文档

http://tasharen.com/ngui/docs/class_u_i_panel.html



如果你有一些和这个组件相关的问题,也可以在下面讨论。





你可能感兴趣的:(Panel)