Unity 隨手記 實用技巧01 - 長按Button

何佳泓
3 min readDec 8, 2018

--

Unity EventSystem + IPointerDownHandler +計時器

長按按鈕的最簡單製作方式,可以搭配 IPointerDownHandler 及計時器就可以完成,只是常常這種方式 除了執行自己本身身上的腳本外,也常會去呼叫其他物件上的腳本。若搭配Unity EventSystem,就可以在Inspector上多一個像Button的 觸發按鈕事件,個人覺得蠻方便的,如果想要觸發的時候就拉進去設定,就不用在程式碼中呼叫一堆Public 的物件然後在觸發他的腳本。

使用EventSystems在Inspector的觸發事件

製作邏輯:1.按下按鈕時 開始計時 2.時間到 觸發事件

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Events;
using UnityEngine.EventSystems;
public class LongPressEffect : MonoBehaviour, IPointerDownHandler, IPointerUpHandler{
public float PressDownTimer; //按下幾秒觸發
private bool PressDown; //按下
public UnityEvent onLongClick; //開啟Inspector觸發事件
[SerializeField]
public float HoldTime;
//按下按鈕
public void OnPointerDown(PointerEventData eventData){
PressDown = true;
Debug.Log("PressDown");
}
//按鈕彈起
public void OnPointerUp(PointerEventData eventData){
Reset();
Debug.Log("PressUp");
}
//當按下按鈕 PressDown = true 時計時
void Update(){
if (PressDown == true){
PressDownTimer += Time.deltaTime;
if (PressDownTimer >= HoldTime){
if (onLongClick != null){
onLongClick.Invoke();
}
Reset();
}
}
}
//當PressUp的時候重製計算時間
private void Reset(){
PressDown = false;
PressDownTimer = 0;
}
//觸發後執行的功能
public void LongPressFuntion() {
Debug.Log("觸發後執行的功能");
}
}

相關資訊參考 IPointer Handler 官方相關連結

IPointerClickHandler — OnPointerClick 點擊
IPointerEnterHandler — OnPointerEnter 進入
IPointerExitHandler — OnPointerExit 離開
IPointerDownHandler — OnPointerDown 按下
IPointerUpHandler— OnPointerUp 彈起

--

--

何佳泓
何佳泓

Written by 何佳泓

從設計的角度擁抱程式,走進互動世界

No responses yet