UGUI中的事件系統

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