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遮罩
問題:遮罩會擋住當前元件的其他圖片文字,導致想要實現遮罩外部的圖片部分被擋住。
方案:遮罩需要遮住的部分單獨做成一個元件,再放入主元件中
動畫的建立:
多選要用來製作動畫的圖片,再點選左上方動畫建立按鈕 。
程式碼呼叫:
GMovieClip movie = ui.GetChild("movie").asMovieClip;
// 從start幀開始,播放到end幀(-1表示結尾),重複times次(0表示無限迴圈),迴圈結束後,停止在endAt幀(-1表示引數
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"));