NGUI里有UIPopupList和UIPPopupMenu。不过对比了下貌似两个没有差别的说...........

UIPopupList                                                    UIPPopupMenu

        

           

  

是吧,除了再发送事件那里多了一个发送事件,都是一样的。下面我讲讲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。没有panel所有东西都不能够被渲染出来,你可以把UIPanel当做Renderer。

           

如果创建了一个有很多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)。

小贴士

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