UGUI_UI元素自定义交互事件
来源:互联网 发布:网络摄像头服务器搭建 编辑:程序博客网 时间:2024/06/06 01:52
1.UGUI中支持的事件
MSDN链接:https://docs.unity3d.com/Manual/SupportedEvents.html
参考博文:http://blog.csdn.net/lyh916/article/details/44570503
2. 实现事件有两种方式:
a).编辑器:添加EventTrigger组件
b).代码:继承EventTrigger实现所需要的事件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
using
System.Collections;
using
System.Collections.Generic;
using
UnityEngine;
using
UnityEngine.EventSystems;
public
class
CubeState : EventTrigger{
//====================================================================================
//其它系列:
//OnSubmit、OnCancel、OnDrop、OnMove、OnScroll
//====================================================================================
//PC平台下按Enter键
public
override
void
OnSubmit(BaseEventData eventData)
{
Debug.Log(
"调用OnSubmit..."
);
}
//PC平台下按ESC键
public
override
void
OnCancel(BaseEventData eventData)
{
Debug.Log(
"调用OnCancel..."
);
}
//鼠标松开时
public
override
void
OnDrop(PointerEventData eventData)
{
Debug.Log(
"调用OnDrop..."
);
}
//物体在移动时(未测试)
public
override
void
OnMove(AxisEventData eventData)
{
Debug.Log(
"调用OnMove..."
);
}
//鼠标滚轮滚动的时候(未测试)
public
override
void
OnScroll(PointerEventData eventData)
{
Debug.Log(
"调用OnScroll..."
);
}
//====================================================================================
//Select系列:
//OnSelect、OnUpdateSelected、OnDeselect
//====================================================================================
//当被选中的时候调用一次
public
override
void
OnSelect(BaseEventData eventData)
{
Debug.Log(
"调用OnSelect..."
);
}
//在选中的时候每帧都会被调用
public
override
void
OnUpdateSelected(BaseEventData eventData)
{
//Debug.Log("调用OnUpdateSelected...");
}
//物体从选中状态到取消选中状态时会被调用
public
override
void
OnDeselect(BaseEventData eventData)
{
Debug.Log(
"调用OnDeselect..."
);
}
//====================================================================================
//Pointer系列:
//执行先后顺序:
//OnPointerDown>OnPointerEnter>OnPointerClick>OnPointerUp>OnPointerExit
//====================================================================================
//初始化拖拽时
public
override
void
OnInitializePotentialDrag(PointerEventData eventData)
{
Debug.Log(
"调用OnInitializePotentialDrag..."
);
}
//指针刚开始点击之后点击之后第一时间时
public
override
void
OnPointerEnter(PointerEventData eventData)
{
Debug.Log(
"调用OnPointerEnter..."
);
}
//在同一个物体上点击
public
override
void
OnPointerClick(PointerEventData eventData)
{
Debug.Log(
"调用OnPointerClick..."
);
}
//鼠标抬起
public
override
void
OnPointerUp(PointerEventData eventData)
{
Debug.Log(
"调用OnPointerUp..."
);
}
//鼠标按下
public
override
void
OnPointerDown(PointerEventData eventData)
{
Debug.Log(
"调用OnPointerDown..."
);
}
//结束的时候
public
override
void
OnPointerExit(PointerEventData eventData)
{
Debug.Log(
"调用OnPointerExit..."
);
}
//====================================================================================
//拖拽系列:
//OnBeginDrag、OnDrag、OnEndDrag
//====================================================================================
//开始拖拽
public
override
void
OnBeginDrag(PointerEventData eventData)
{
Debug.Log(
"调用OnBeginDrag..."
);
//Debug.Log("pointerPress:"+eventData.pointerPress);
//Debug.Log("pressPosition;" + eventData.pressPosition);
ChangePositionByDrag(eventData);
}
//拖拽过程中
public
override
void
OnDrag(PointerEventData eventData)
{
//Debug.Log("调用OnDrag...");
ChangePositionByDrag(eventData);
}
//结束拖拽
public
override
void
OnEndDrag(PointerEventData eventData)
{
Debug.Log(
"调用OnEndDrag..."
);
ChangePositionByDrag(eventData);
}
//拖过拖拽变更自身坐标
void
ChangePositionByDrag(PointerEventData eventData) {
var
rt = gameObject.GetComponent<RectTransform>();
Vector3 globalMousePos;
if
(RectTransformUtility.ScreenPointToWorldPointInRectangle(rt, eventData.position, eventData.pressEventCamera,
out
globalMousePos))
{
rt.position = globalMousePos;
}
}
}
3.将事件究极封装起来
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
using
UnityEngine;
using
System.Collections;
using
UnityEngine.EventSystems;
public
class
EventTriggerListener : EventTrigger {
#region 变量
//带参数是为了方便取得绑定了UI事件的对象
public
delegate
void
PointerEventDelegate(GameObject go, PointerEventData eventData);
public
delegate
void
BaseEventDelegate(GameObject go, BaseEventData eventData);
public
delegate
void
AxisEventDelegate(GameObject go, AxisEventData eventData);
public
event
PointerEventDelegate onPointerEnter;
public
event
PointerEventDelegate onPointerExit;
public
event
PointerEventDelegate onPointerDown;
public
event
PointerEventDelegate onPointerUp;
public
event
PointerEventDelegate onPointerClick;
public
event
PointerEventDelegate onInitializePotentialDrag;
public
event
PointerEventDelegate onBeginDrag;
public
event
PointerEventDelegate onDrag;
public
event
PointerEventDelegate onEndDrag;
public
event
PointerEventDelegate onDrop;
public
event
PointerEventDelegate onScroll;
public
event
BaseEventDelegate onUpdateSelected;
public
event
BaseEventDelegate onSelect;
public
event
BaseEventDelegate onDeselect;
public
event
AxisEventDelegate onMove;
public
event
BaseEventDelegate onSubmit;
public
event
BaseEventDelegate onCancel;
#endregion
public
static
EventTriggerListener GetListener(GameObject go)
{
EventTriggerListener listener = go.GetComponent<EventTriggerListener>();
if
(listener ==
null
) listener = go.AddComponent<EventTriggerListener>();
return
listener;
}
#region 方法
public
override
void
OnPointerEnter(PointerEventData eventData)
{
if
(onPointerEnter !=
null
) onPointerEnter(gameObject, eventData);
}
public
override
void
OnPointerExit(PointerEventData eventData)
{
if
(onPointerExit !=
null
) onPointerExit(gameObject, eventData);
}
public
override
void
OnPointerDown(PointerEventData eventData)
{
if
(onPointerDown !=
null
) onPointerDown(gameObject, eventData);
}
public
override
void
OnPointerUp(PointerEventData eventData)
{
if
(onPointerUp !=
null
) onPointerUp(gameObject, eventData);
}
public
override
void
OnPointerClick(PointerEventData eventData)
{
if
(onPointerClick !=
null
) onPointerClick(gameObject, eventData);
}
public
override
void
OnInitializePotentialDrag(PointerEventData eventData)
{
if
(onInitializePotentialDrag !=
null
) onInitializePotentialDrag(gameObject, eventData);
}
public
override
void
OnBeginDrag(PointerEventData eventData)
{
if
(onBeginDrag !=
null
) onBeginDrag(gameObject, eventData);
}
public
override
void
OnDrag(PointerEventData eventData)
{
if
(onDrag !=
null
) onDrag(gameObject, eventData);
}
public
override
void
OnEndDrag(PointerEventData eventData)
{
if
(onEndDrag !=
null
) onEndDrag(gameObject, eventData);
}
public
override
void
OnDrop(PointerEventData eventData)
{
if
(onDrop !=
null
) onDrop(gameObject, eventData);
}
public
override
void
OnScroll(PointerEventData eventData)
{
if
(onScroll !=
null
) onScroll(gameObject, eventData);
}
public
override
void
OnUpdateSelected(BaseEventData eventData)
{
if
(onUpdateSelected !=
null
) onUpdateSelected(gameObject, eventData);
}
public
override
void
OnSelect(BaseEventData eventData)
{
if
(onSelect !=
null
) onSelect(gameObject, eventData);
}
public
override
void
OnDeselect(BaseEventData eventData)
{
if
(onDeselect !=
null
) onDeselect(gameObject, eventData);
}
public
override
void
OnMove(AxisEventData eventData)
{
if
(onMove !=
null
) onMove(gameObject, eventData);
}
public
override
void
OnSubmit(BaseEventData eventData)
{
if
(onSubmit !=
null
) onSubmit(gameObject, eventData);
}
public
override
void
OnCancel(BaseEventData eventData)
{
if
(onCancel !=
null
) onCancel(gameObject, eventData);
}
#endregion
}
调用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using
UnityEngine;
using
System.Collections;
using
UnityEngine.EventSystems;
public
class
TestUI3 : MonoBehaviour {
private
GameObject button;
private
GameObject image;
void
Start ()
{
button = GameObject.Find(
"Button"
);
image = GameObject.Find(
"Image"
);
EventTriggerListener.GetListener(button).onPointerClick += Click;
EventTriggerListener.GetListener(image).onDrag += Drag;
}
public
void
Click(GameObject go)
{
Debug.Log(go.name);
}
public
void
Drag(GameObject go)
{
Debug.Log(go.name);
}
}
2.示例Demo
链接:http://pan.baidu.com/s/1kVbyVzT 密码:rauj
阅读全文
0 0
- UGUI_UI元素自定义交互事件
- 交互工具Axure使用技巧----master内部交互元素添加事件操作master以外页面元素
- js自定义事件及事件交互原理概述(一)
- js自定义事件及事件交互原理概述(二)
- jQuery获取绑定自定义事件的元素
- jQuery自定义元素右键点击事件
- jQuery自定义元素右键点击事件
- javascript给元素定义自定义事件(非html原生事件)
- UE4信息交互-命令行执行自定义事件ConsoleCommand
- UGUI_UI的深度学习
- progress--状态交互元素
- 自定义元素
- unity游戏开发之服务器与客户端或页面流转之自定义交互事件
- 安卓开发学习之020 自定义视图的用户交互事件
- 自定义View(4)——用户交互、点击事件监听
- 事件传递和交互
- COCOS2DX事件交互处理
- cocos2d-js 事件交互
- mina prefixedDataAvailable
- APK签名之keytool生成keystore和jarsigner签名apk
- mysql外键关联导致的150错误(MySQL ERROR 1005: Can't create table (errno: 150))
- ajax定时请求html
- Python3 re(正则表达式)
- UGUI_UI元素自定义交互事件
- 搭建Nginx1.10.x静态网站(PC和Mobile)
- SpringMVC整合Shiro权限框架
- springmvc框架定时器功能实现和service注入问题解决
- 7、XML 学习记录——简介
- C#实现Word转PDF
- js 长图拖动效果
- python websocket client
- 电阻丝烧断原因分析