1.UGUI中支持的事件html
MSDN連接:https://docs.unity3d.com/Manual/SupportedEvents.htmlc#
參考博文:http://blog.csdn.net/lyh916/article/details/44570503編輯器
2. 實現事件有兩種方式:ide
a).編輯器:添加EventTrigger組件測試
b).代碼:繼承EventTrigger實現所須要的事件spa
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.將事件究極封裝起來.net
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
}
|
調用:3d
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);
}
}
|