我們會發現Unity4.6 UI新的UI系統中Button默認只提供了Onclick的調用方法,有時我們不僅僅想監聽Button的Click事件,同時還需要監聽MouseIn(鼠標進入事件)MouseOut(鼠標滑出事件).
這時我們就需要藉助新的UI系統中EventTrigger腳本來實現,下面我們來學習一下,首先我們看一下如何通過EventTrigger來實現按鈕點擊Click事件.
第一步:通過Hierarchy面板創建button(詳細參考Unity4.6 UI按鈕綁定事件(一))
第二步:創建一個名爲EventHandler的腳本,代碼如下
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
|
using
UnityEngine; using
System.Collections; using
UnityEngine.UI; using
UnityEngine.EventSystems; //需要EventTrigger腳本的支援 [RequireComponent( typeof (UnityEngine.EventSystems.EventTrigger))] public
class
EventHandler : MonoBehaviour { //
Use this for initialization void
Start() { Button
btn = this .GetComponent<Button>(); UnityEngine.EventSystems.EventTrigger
trigger = btn.gameObject.GetComponent<UnityEngine.EventSystems.EventTrigger>(); EventTrigger.Entry
entry = new
EventTrigger.Entry(); entry.eventID
= EventTriggerType.PointerClick; entry.callback
= new
EventTrigger.TriggerEvent(); entry.callback.AddListener(Onclick); trigger.delegates.Add(entry); } private
void
Onclick(BaseEventData pointData) { Debug.Log( "Button
Clicked" ); } } |
第三步,綁定EventHandler腳本到Button上
然後運行點擊按鈕就能看到運行的結果了。
如果我們想在Unity4.6 新的UI中實現MouseIn怎麼辦,很簡單我們只需要修改下EventTriggerType.PointerClick事件類型改爲EventTriggerType.PointerEnter,同理要監聽MouseOut事件只需要修改爲EventTriggerType.PointerExit
新的實現代碼如下
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
|
using
UnityEngine; using
System.Collections; using
UnityEngine.UI; using
UnityEngine.EventSystems; //需要EventTrigger腳本的支援 [RequireComponent( typeof (UnityEngine.EventSystems.EventTrigger))] public
class
EventHandler : MonoBehaviour { //
Use this for initialization void
Start() { Button
btn = this .GetComponent<Button>(); UnityEngine.EventSystems.EventTrigger
trigger = btn.gameObject.GetComponent<UnityEngine.EventSystems.EventTrigger>(); EventTrigger.Entry
entry = new
EventTrigger.Entry(); //鼠標點擊事件 //entry.eventID
= EventTriggerType.PointerClick; //鼠標滑出事件 //entry.eventID
= EventTriggerType.PointerExit; //鼠標進入事件 entry.eventID
= EventTriggerType.PointerEnter; entry.callback
= new
EventTrigger.TriggerEvent(); entry.callback.AddListener(OnMouseEnter); trigger.delegates.Add(entry); } private
void
OnMouseEnter(BaseEventData pointData) { Debug.Log( "Button
Enter" ); } } |