在這篇內容中有提到過按鈕的製作,後來發現Unity有提供EventSystems的介面,就來介紹一下,下圖的結果點我。
首先新增GameObject->UI->Button物件,接著在Button物件下新增處理事件的Script,這裡我命名為ButtonTest.cs。
到這裡事前準備就算完成,接著來看Script的內容:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class ButtonTest : MonoBehaviour
,IPointerClickHandler////(1)
,IPointerEnterHandler
,IPointerExitHandler
,IPointerDownHandler
,IPointerUpHandler
,IEventSystemHandler{
public void OnPointerClick(PointerEventData eventData){
Debug.Log("Click");
}
public void OnPointerEnter(PointerEventData eventData){
Debug.Log("Enter");
}
public void OnPointerExit(PointerEventData eventData){
Debug.Log("Exit");
}
public void OnPointerDown(PointerEventData eventData){
Debug.Log("Down");
}
public void OnPointerUp(PointerEventData eventData){
Debug.Log("Up");
}
}
(1)這裡實作有關Button事件的介面,使用逗號接在MonoBehaviour之後就好,依序是:IPointerClickHandler - OnPointerClick 點擊。
IPointerEnterHandler - OnPointerEnter 進入。
IPointerExitHandler - OnPointerExit 離開。
IPointerDownHandler - OnPointerDown 按下。
IEventSystemHandler - OnPointerUp 彈起。
再增加一個布林變數做判斷:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class ButtonTest : MonoBehaviour
,IPointerExitHandler
,IPointerDownHandler
,IPointerUpHandler
,IEventSystemHandler{
private bool DownState = false;
public void OnPointerExit(PointerEventData eventData){
Debug.Log("Exit");
DownState = false;
}
public void OnPointerDown(PointerEventData eventData){
Debug.Log("Down");
DownState = true;
}
public void OnPointerUp(PointerEventData eventData){
Debug.Log("Up");
DownState = false;
}
private float timer = 0;
void Update(){
if (DownState)
timer += Time.deltaTime;
else
timer = 0;
}
}
按鈕長按的狀態就可以做出來,這次就到這裡。

沒有留言:
張貼留言