NGUI第八课--UIPopupList讲解以及UIPanel的一些小知识

2015年03月20日 10:14 0 点赞 0 评论 更新于 2025-11-21 17:48

在NGUI中,存在UIPopupList和UIPPopupMenu这两个组件。经过对比,二者似乎没有太大差别。

组件特点
UIPopupList-
UIPPopupMenu相较于UIPopupList,在发送事件处多了一个发送事件的功能

总体而言,除了UIPopupMenu在发送事件方面的细微差异,二者基本相同。下面将详细讲解UIPopupList这个脚本。

创建UIPopupList

基本元素

前景和背景sprite的概念较为直观,在此不做过多解释。Highlight指的是当鼠标移动到某一项时显示出的高亮sprite,由于文字描述可能不够清晰,建议参考相关图示。

选项设置

可以在Options框中为Popup List指定不同的选项。该框为多行文本框,每一行代表一个选项。

字体设置

Font用于指定创建popup list的label所使用的字体。例如,在前面的示例中,List Option 0、List Option 1和List Option 2选项的label就是使用inspector中指定的“Arimo20”字体创建的。如果使用的是bitmap字体,可能需要修改Font Size;若使用的是dynamic字体,则可能需要修改Font Style。Text Color用于修改文字的颜色,Padding用于控制文字与从Atlas中选择的Background(border)之间的间隔。

本地化设置

如果选项需要使用本地化系统Localization System,勾选Localized即可。

事件处理

在OnValueChange部分,可以指定一个函数,当选项发生变化时调用该函数。若有一个label,可使用它的SetCurrentSelection函数来显示当前Popup List选择的选项。具体操作步骤为:将这个label的game object拖拽到Notify属性中,然后在下拉框中选择UILabel.SetCurrentSelection。

UIPanel的一些小知识

基本功能

UIPanel用于收集和管理其下面所有widget的组件,并通过widget的geometry创建实际的draw call。可以将UIPanel视为Renderer,因为没有UIPanel,所有内容都无法被渲染出来。

性能优化

  • Cull选项:如果创建了一个包含大量geometry的scrollable panel,可以勾选Cull选项来减少三角形的数目。但需要注意的是,这样做可能会降低性能,因为widget的可视性需要在每次update时都进行检验。
  • Static选项:勾选Static选项可以告诉NGUI该panel下面的widget不会被移动,从而提高性能。NGUI会忽略所有的position/rotation/scale改变,因此在运行时移动widget将无效,使用时需谨慎。

调试功能

如果需要调试由panel创建的draw calls,Show All选项可能会有所帮助。启用该选项后,会看到由panel创建的所有draw call,并按照渲染顺序排序。每个draw call会包含其使用的material的详细信息,以及使用该material的widget信息,甚至可以关闭某些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)。

小贴士

一个动力学Rigidbody会自动添加到panel上,因为对于Unity来说,这样可以提升性能。移动静态的collider会消耗较多性能,而移动rigidbody则不会。

作者信息

menghao

menghao

共发布了 3994 篇文章