1. 程式人生 > >fairyGUI介面控制元件的基本製作和功能實現

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"));