FairyGUI基本操作和功能实现

fairyGUI界面控件的基本制作和功能实现

1.学习地址:官网和泰课在线

fairyGUI官网: http://www.fairygui.com/tutorial

泰课在线: http://www.taikr.com/cloud/search?q=fairyGUI


2.按钮  

一般按钮有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"));


猜你喜欢

转载自blog.csdn.net/weixin_39706943/article/details/80538559
今日推荐