Unity长按按钮多次升级

发布于:2025-02-22 ⋅ 阅读:(39) ⋅ 点赞:(0)

方案一  事件接口

using UnityEngine;
using UnityEngine.EventSystems;

public class Test : MonoBehaviour,IPointerDownHandler,IPointerUpHandler,IPointerExitHandler
{
    private float unitTime = 0.5f;//间隔时间
    private bool startClick;//是否在按压按钮
    private float recordTime = 0f;//记录时间
    
    private void Update()
    {
        if (startClick)
        {
            recordTime += Time.deltaTime;
            if (recordTime >= unitTime)
            {
                Debug.Log("升级了");
                recordTime = 0f;
            }
        }
    }
    
    public void OnPointerDown(PointerEventData eventData)
    {
        Debug.Log("按下");
        startClick = true;
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        Debug.Log("松开");
        startClick = false;
        recordTime = 0f;
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        Debug.Log("离开了");
        startClick = false;
        recordTime = 0f;
    }
}

方案二  EventTrigger

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;

public class Test : MonoBehaviour
{
    public GameObject target;
    private float unitTime = 0.5f;//间隔时间
    private bool startClick;//是否在按压按钮
    private float recordTime = 0f;//记录时间
    
    private void Start()
    {
        List<EventTrigger.Entry> entryList = new List<EventTrigger.Entry>();
        
        //按下
        entryList.Add(GetNewEntry(EventTriggerType.PointerDown, (data) =>
        {
            Debug.Log("按下");
            startClick = true;
        }));
        
        //松开按钮
        entryList.Add(GetNewEntry(EventTriggerType.PointerUp, (data) =>
        {
            Debug.Log("松开");
            startClick = false;
            recordTime = 0f;
        }));
        
        //离开交互区
        entryList.Add(GetNewEntry(EventTriggerType.PointerExit, (data) =>
        {
            Debug.Log("离开了");
            startClick = false;
            recordTime = 0f;
        }));
        
        EventTrigger trigger = target.AddComponent<EventTrigger> ();
        trigger.triggers.AddRange(entryList);
    }
    
    private void Update()
    {
        if (startClick)
        {
            recordTime += Time.deltaTime;
            if (recordTime >= unitTime)
            {
                Debug.Log("升级了");
                recordTime = 0f;
            }
        }
    }
    
    public EventTrigger.Entry GetNewEntry(EventTriggerType type, UnityAction<BaseEventData> callback)
    {
        EventTrigger.Entry entry = new EventTrigger.Entry ();
        entry.eventID = type;
        entry.callback.AddListener(callback);
        return entry;
    }
}