【Unity3D】【NGUI】UIPanel

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

NGUI討論羣:333417608

概述


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就不會。

類文檔

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章