2015年9月21日 星期一

【Unity】UI Button事件(OnPointerClick等)

Unity - UI物件測試 玩家名稱輸入
在這篇內容中有提到過按鈕的製作,後來發現Unity有提供EventSystems的介面,就來介紹一下,下圖的結果點我
Unity Button event

首先新增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;
        }
}
按鈕長按的狀態就可以做出來,這次就到這裡。

沒有留言:

張貼留言

【自製小遊戲】水平思考猜謎(海龜湯)

遊戲連結 海龜湯的玩法是由出題者提出一個難以理解的事件,參與猜題者可以提出任何問題以試圖縮小範圍並找出事件背後真正的原因。但出題者僅能以「是」、「不是」或「沒有關係」來回答問題。 本遊戲蒐集各種論壇、平台的42個題目,提供給想玩海龜湯卻愁找不到題目的你們。 ...