fairyGUI界面控件的基本製作和功能實現

fairyGUI界面控件的基本製作和功能實現

一般按鈕有4個態:(點開按鈕模塊可查看)up/down/over/selectedOver



按鈕的示例代碼

private GButtonbtn_helmet;

btn_helmet = this.ui.GetChild("btn_helmet")as GButton;

btn_helmet.onClick.Set((EventContextcontext) =>  {//按鈕點擊事件添加});

常用事件:

onRightClick:右鍵點擊事件

onRollOver:鼠標懸停事件

onRollOut:鼠標懸停移出事件

onDragStart:拖拽事件



鼠標拖拽cell1按鈕的圖標至按鈕cell上鬆開鼠標的相應事件:onDrop()



3遮罩

問題:遮罩會擋住當前組件的其他圖片文本,導致想要實現遮罩外部的圖片部分被擋住。

方案:遮罩需要遮住的部分單獨做成一個組件,再放入主組件中




4.動畫和動效

動畫的創建:

多選要用來製作動畫的圖片,再點擊左上方動畫創建按鈕       。


代碼調用:

GMovieClip movie = ui.GetChild("movie").asMovieClip;

//start幀開始,播放到end幀(-1表示結尾),重複times次(0表示無限循環),循環結束後,停止在endAt幀(-1表示參數end

movie.SetPlaySettings(0,-1,1,-1);


動效的編輯:

1.選中動效後出現動效編輯界面

2.鼠標右鍵點擊出現可編輯選項

3.選中改變動畫用於控制動畫播放

  


動效的調用:

private Transition t1;

t1 = ui.GetTransition("t1");

t1.Play((=>{//動效結束後的回調}));


5.控制器

控制器的創建:

在控制器欄點擊         ,控制器也可以與組配合使用


代碼調用:

private Controller c1;

c1 = this.ui.GetController("c1");

       c1.selectedIndex = 1;

//還可以用DOTween.To實現控制器由起始序號到指定序號


6.普通列表


代碼調用:

GListlist1 = obj.GetChild("list1").asList;

list1.RemoveChildrenToPool();

for (int i = 0; i < cnt; i++)

{

GButton item = list1.AddItemFromPool().asButton;

item.GetChild("t0").text = "" +(i+1);

}


7.虛擬列表

代碼調用:

_list = _mainView.GetChild("mailList").asList;

_list.SetVirtual();

//itemRenderer , Callback functionwhen an item is needed to update its look

_list.itemRenderer = RenderListItem;

_list.numItems = 1000;

void RenderListItem(intindex, GObject obj)

{

//MailItem繼承Gbutton。列表的內容

MailItem item = (MailItem)obj; 

item.title =index + " Mail title here";

}

/// <summary>

/// Callback function when an item is needed to update its look.

/// </summary>

/// <param name="index">Item index.</param>

/// <param name="item">Item object.</param>

public delegate void ListItemRenderer(int index, GObject item);


8.虛擬循環列表


代碼調用:

_list = _mainView.GetChild("list").asList;

_list.SetVirtualAndLoop();

_list.itemRenderer= RenderListItem;  

_list.numItems= 5;

//鼠標滾輪滾動的時候實現中間放大的特效

_list.scrollPane.onScroll.Add(DoSpecialEffect);

//根據到中心點的距離改變列表項的大小縮放

void DoSpecialEffect()

{

 float midX= _list.scrollPane.posX + _list.viewWidth / 2;

  intcnt= _list.numChildren;         //子項數量從0開始計算

 for (int i = 0; i < cnt; i++)

  {

    GObject obj = _list.GetChildAt(i);

    float dist = Mathf.Abs(midX - obj.x - obj.width / 2);

    if (dist > obj.width) //nointersection 列表項與中心沒有交集

      obj.SetScale(1,1);

   else

   {

     float ss= 1 + (1 - dist / obj.width) * 0.24f; //有交集。越往中心越大。

    obj.SetScale(ss, ss);

  }

 }

// _list.numItems子項數量從1開始計算

_mainView.GetChild("n3").text = "" +((_list.GetFirstChildInView() + 1) % _list.numItems);

}


8.3D界面

2D界面不同在於設置3D世界座標:

//設置層級

this.SetWindow3DShell(MySelf.Inst.MySceneObject.transform);

this.SetScale(newVector3(0.0022f, 0.0022f, 0.0022f));

this.SetLocalPosition(newVector3(0, 0, 0.4f));

this.SetLocalRotation(newVector3(0, 180, 0));        


9.圖形

注意圖形在不同平臺的兼容性,例如圓角和圓形在某些平臺是暫時未支持的。
圖形的類型選擇爲空白時,可以作爲佔位的用途,這種圖形不消耗顯示資源



10.加載3D模型


舉例:

        現在要在UI中放置入一個原生的對象aSprite,則可以在適當位置放入一個空白的圖形,假設對象爲holder,那麼代碼裏可以這樣寫:holder.setNativeObject(aSprite),這樣就把aSprite放到了holder所在的位置和深度上。

加載3D模型:

        注意圖形不能設置爲空白。圖形的中心爲加載的模型的中心點座標。


相關代碼:

 _holder.SetNativeObject(newGoWrapper(model));

model.transform.localPosition = new Vector3(0, 0, 0);

model.transform.localEulerAngles= new Vector3(0, 180, 0);

model.transform.localScale = new Vector3(380, 380, 380);

model.SetGameObjectLayer(LayerMask.NameToLayer("layer_editobj"));



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