fairyGUI界面控件的基本制作和功能实现
阅读原文时间:2021年04月21日阅读:1

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

}

///

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

///

/// Item index.

/// Item object.

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

  1. 图形

注意图形在不同平台的兼容性,例如圆角和圆形在某些平台是暂时未支持的。
图形的类型选择为空白时,可以作为占位的用途,这种图形不消耗显示资源

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

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章