fairyGUI官网: http://www.fairygui.com/tutorial
泰课在线: http://www.taikr.com/cloud/search?q=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()
方案:遮罩需要遮住的部分单独做成一个组件,再放入主组件中
动画的创建:
多选要用来制作动画的图片,再点击左上方动画创建按钮 。
代码调用:
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((=>{//动效结束后的回调}));
控制器的创建:
在控制器栏点击 ,控制器也可以与组配合使用
代码调用:
private Controller c1;
c1 = this.ui.GetController("c1");
c1.selectedIndex = 1;
//还可以用DOTween.To实现控制器由起始序号到指定序号
代码调用:
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);
}
代码调用:
_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);
}
和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));
注意图形在不同平台的兼容性,例如圆角和圆形在某些平台是暂时未支持的。
图形的类型选择为空白时,可以作为占位的用途,这种图形不消耗显示资源
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"));