UG2L14——Eventlistener和Eventtrigger

Eventlistener和Eventtrigger

他们帮助我们封装了所有 NGUI特殊响应函数
可以通过它对各种对象进行管理添加 NGUI特殊响应函数

本章代码关键字

1
2
3
4
5
6
7
8
9
10
11
12
UIEventlistener              //向对象添加Eventlistener控件以添加特殊响应函数
UIEventListener.Get() //向对象增加或获取对象的Eventlistener,使该对象可以向其添加特殊响应函数
Eventtrigger //更适合面板添加函数的控件
OnHover(bool isOver) //经过
OnPress(bool pressed) //按下
OnClick() //点击
OnDoubleClick() //双击
OnDragStart() //拖曳开始
OnDrag(Vector2 delta) //拖曳中
OnDragEnd() //拖曳结束
OnDragOver(GameObject go) //拖曳经过某对象
OnDragOut(GameObject go) //拖曳离开某对象

控件自带事件的局限性

目前复合控件只提供了一些常用的事件监听方式
比如:Button——点击、Toggle—值变化等等
如果想要制作 按下、抬起、长按 等功能利用现在的知识是无法完成的

NGUI事件响应函数

添加了碰撞器的对象
NGUI提供了一些利用反射调用的函数

1
2
3
4
5
6
7
8
9
10
OnHover(bool isOver)         //经过
OnPress(bool pressed) //按下
OnClick() //点击
OnDoubleClick() //双击
OnDragStart() //拖曳开始
OnDrag(Vector2 delta) //拖曳中
OnDragEnd() //拖曳结束
OnDragOver(GameObject go) //拖曳经过某对象
OnDragOut(GameObject go) //拖曳离开某对象
//等等等等

按下

1
2
3
4
5
6
7
void OnPress(bool pressed)
{
if (pressed)
print("按下");
else
print("抬起");
}

经过

1
2
3
4
5
6
7
void OnHover(bool isOver)
{
if (isOver)
print("正在经过");
else
print("离开");
}

点击

1
2
3
4
void OnClick()
{
print("点击相关");
}

双击

1
2
3
4
void OnDoubleClick()
{
print("双击相关");
}

拖曳开始

1
2
3
4
void OnDragStart()
{
print("拖曳开始");
}

拖曳中

delta是Vector2变量,代表的是相对于上一次移动的位置

1
2
3
4
void OnDrag(Vector2 delta)
{
print("拖曳中" + delta);
}

拖曳结束

1
2
3
4
void OnDragEnd()
{
print("拖曳结束");
}

某对象拖曳经过另一个对象

注意,传入的obj代表的是当前拖的对象

1
2
3
4
void OnDragOver(GameObject obj)     //注意,这个obj代表的是当前拖的对象
{
print("拖曳经过" + obj.name);
}

某对象拖曳离开另一个对象

注意,传入的obj代表的是当前拖的对象

1
2
3
4
void OnDragOut(GameObject obj)      //注意,这个obj代表的是当前拖的对象
{
print("拖曳离开" + obj.name);
}

UIEventListener

适合代码添加,能添加的函数参照上方

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public UISprite A;
public UISprite B;

void Start()
{
UIEventListener listener = UIEventListener.Get(A.gameObject);
listener.onPress += (obj, isPress) => {
print(obj.name + "被按下或者抬起了" + isPress);
};
listener.onDragStart += BeginDrag;
}

private void BeginDrag(GameObject obj)
{
print(obj.name + "开始拖曳");
}

UIEventTrigger

适合Inspector面板 关联脚本添加 能添加的函数参照上方
操作类似于之前的各种复合控件提供拖曳关联监听函数

Eventlistener和Eventtrigger区别

  1. Listener更适合 代码添加监听 Trigger适合拖曳对象添加监听
  2. Listener传入的参数 更具体 Trigger就不会传入参数 我们需要在函数中去判断处理逻辑