1. 程式人生 > >FairyGUI 筆記 Object(一)

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都不選擇

    這兩個層。另外,執行時場景裡會自動出現Capture Camera物件,這是正常的,不需要理會。

    如果你要對使用了自定義遮罩的元件進行設定傾斜、設定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 獲取物件是否在舞臺上。物件是否在舞臺上受多種因素影響,例如物件是否在顯示列表中,是否被顯示控制器隱藏,是否被組的顯示控制隱藏等。