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