FairyGUI 筆記 Object(一)
BlendMode
這個提供了一部分的混合選項設定。對於Unity平臺,對圖片、動畫、文字,你可以放心地修改它們的BlendMode。但對於元件,請謹慎使用。元件的BlendMode需要使用到FairyGUI提供的PaintMode技術,目標元件會轉化為RenderTexture,再使用混合選項。這裡面會有一定的記憶體消耗。但實現細節無需開發者介入。
Unity的Blend效果與編輯器中的預覽可能會有差別。開發者可以通過使用以下程式碼重定義混合效果。注意:設定了特別BlendMode的顯示物件無法與其他顯示物件合併Draw Call。
BlendModeUtils.Override(BlendMode.Add, UnityEngine.Rendering.BlendMode.XX, UnityEngine.Rendering.BlendMode.XX);
濾鏡
目前編輯器支援兩種濾鏡的定義,顏色濾鏡和模糊濾鏡。對於H5類平臺,請謹慎使用濾鏡,因為會帶來一定的消耗;對於Unity平臺,你可以放心地對圖片、動畫、裝載器使用顏色濾鏡,這幾乎不會帶來額外消耗,但對於其他型別的元件,例如元件,請謹慎使用。元件的濾鏡需要使用到FairyGUI提供的PaintMode技術,目標元件會轉化為RenderTexture,再使用濾鏡。這裡面會有一定的記憶體消耗。但實現細節無需開發者介入。- 注意:設定了濾鏡的顯示物件無法與其他顯示物件合併Draw Call。
-
Unity版本須知
對元件使用BlendMode或者濾鏡會需要用到捕獲UI成紋理的功能,所以需要定義VUI、Hidden VUI這兩個Layer,否則會出現警告。這兩個Layer可以隨便定義到沒使用的層序號,但要注意所有相機的Culling Mask都不選擇
如果你要對使用了自定義遮罩的元件進行設定傾斜、設定BlendMode,設定濾鏡,又或者曲面UI中含有自定義遮罩的元件時,需要額外的設定才能顯示正常
UIConfig.depthSupportForPaitingMode = true;
-
TIPS屬性
當滑鼠移到元件範圍內時,顯示這裡定義的文字。這個元件的“擴充套件”屬性需要定義為“標籤”,以便底層將TIPS文字設定到標籤的“標題”屬性中。開啟編輯器主選單“檔案”->“專案設定”,然後在彈出的對話方塊裡選擇“預覽設定”,右邊面板會出現一個“TIPS元件”的設定,將你製作好的標籤元件拖入即可。這裡的設定僅適用於編輯器預覽,執行時需要用程式碼再次設定:
UIConfig.tooltipsWin = "ui://包名/元件名";
-
自定義資料
可以設定一個自定義的資料,這個資料FairyGUI不做解析,按原樣釋出到最後的描述檔案中。開發者可以在執行時獲取。獲取方式是:GObject.data或GObject.userData(Cocos2dx、Vision)。
-
GObject
-
設定座標
SetXY或者單獨設定x、y。 -
設定大小
SetSize或者單獨設定width、height。SetSize還可以帶第三個引數:
//忽略軸心的影響,即在設定了軸心的情況下,改變大小也不會同時改變座標。
aObject.SetSize(100,100,true);
-
設定大小限制
minWidth、maxWidth、minHeight、maxHeight。 -
設定Scale
SetScale或者單獨設定scaleX、scaleY。 -
設定軸心
SetPivot。
aObject.SetPivot(0.5f, 0.5f); //設定軸心
aObject.SetPivot(0.5f, 0.5f, true); //設定軸心,並同時作為錨點
-
設定可見
visible = true/false。注意:即使物件設定visible=false,它仍然在顯示列表中,所以仍然會消耗一定的計算資源(但不會消耗渲染資源),所以如果是長期的隱藏,建議移出顯示列表,即RemoveFromParent。另外,不要和顯示控制器混淆,兩者是獨立的。即使物件的visible=true,如果不在顯示控制器的指定頁面裡,物件仍然是不可見的。 -
設定互動
touchable = true/false。 -
設定變灰
grayed = true/false。 -
設定啟用
enabled = true/false。 元件的啟用狀態其實是由變灰+不可觸控共同組成。
//等同於呼叫GObject.grayed = true + GObject.touchable = false
aObject.enabled = false;
設定旋轉
rotation。Unity版本還支援rotationX和rotationY。2D UI由正交相機渲染,設定rotationX或rotationY可以有旋轉效果,但無透視效果。FairyGUI提供了透視模擬的功能。例如:
//設定物件實用透視模擬
aObject.displayObject.perspective = true;
//可以設定相機距離
aObject.displayObject.focalLength = 2000;
//此時旋轉X軸或Y軸可以有透視效果。
aObject.rotaionX = 30;
獲得原生物件
displayObject。例如:
//獲取原生物件
DisplayObject displayObject = aObject.displayObject;
//Unity版本獲取GameObject
GameObject go = displayObject.gameObject;
-
銷燬
Dispose。銷燬物件,當物件不再使用可以呼叫它,且必須呼叫。注意:紋理、聲音等這些公共資源是由UIPackage管理的,銷燬物件不會回收這些資源。如果要回收這些資源,應該使用UIPackage.RemovePackage。 -
resourceURL
物件在資源庫中的URL地址。只有圖片、動畫、元件這些有連結資源的物件才能獲得這個URL值。可以用這個URL比較兩個元件物件是不是由同一個元件資源構建的。URL是內部編碼格式,不可讀,如果要獲得資源名稱,可以使用下面的方法:
//物件在資源庫中的名稱
Debug.Log(aObject.packageItem.name);
//根據URL獲得資源名稱
Debug.Log(UIPackage.GetItemByURL(resourceURL).name);
onStage
獲取物件是否在舞臺上。物件是否在舞臺上受多種因素影響,例如物件是否在顯示列表中,是否被顯示控制器隱藏,是否被組的顯示控制隱藏等。