Unity2d android 检测触摸

Unity2d android detecting touches

如何为 android 统一检测按钮上的触摸 和长触摸 ? 我已经尝试过此功能,但如果我触摸屏幕上的任何地方,它 returns 为真:

bool checkTouch()
    {
        for(int i = 0; i < Input.touchCount; i++)
        {
            TouchPhase tp = Input.GetTouch(i).phase;
          if(tp == TouchPhase.Began || tp == TouchPhase.Ended || tp == TouchPhase.Stationary)
            return true;  
        }
        return false;
    }

实现按钮的一种方法是创建您自己的按钮,实现必要的接口,如 IPointerDownHandler, IPointerUpHandler

这样您就可以管理按钮的行为方式,下面是一个示例:

using UnityEngine;
using UnityEngine.EventSystems;

public class LongClickButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    private bool pointerDown;
    private float pointerDownTimer;

    [SerializeField]
    private float requiredHoldTime;    

    public void OnPointerDown(PointerEventData eventData)
    {
        pointerDown = true;
        Debug.Log("OnPointerDown");
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        Reset();
        Debug.Log("OnPointerUp");
    }

    private void Update()
    {
        if (pointerDown)
        {
            pointerDownTimer += Time.deltaTime;
            if (pointerDownTimer >= requiredHoldTime)
            {
                //do your LongClick stuff
                Debug.Log("LongClick");
                Reset();
            }
        }
    }

    private void Reset()
    {
        pointerDown = false;
        pointerDownTimer = 0;
    }    
}

记得将脚本附加到可以是 interactable 的 GameObject,例如 Image