【问题标题】:Unity2d android detecting touchesUnity2d android检测触摸
【发布时间】:2020-06-07 08:43:43
【问题描述】:

如何检测 Android 统一按钮上的触摸和长触摸? 我已经尝试过这个功能,但如果我触摸屏幕上的任何地方,它都会返回 true:

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;
    }

【问题讨论】:

  • if(tp == TouchPhase.Began || tp == TouchPhase.Ended || tp == TouchPhase.Stationary) 在这里。只需将您的逻辑置于不同的状态即可。如果您想要按钮而不是使用 UnityEngine.UI 在其中添加 GUI 画布和按钮。不需要脚本,只需按按钮运行
  • 你在哪里打电话给 checkTouch?
  • @Lotan 在附加到按钮 gameobgect 的脚本中
  • 按钮默认使用点击和输入触摸。检查一下,如果你添加一个监听器,比如 myButtonGameObject.GetComponent
  • @Lotan 我需要注册长触摸,而不仅仅是点击

标签: android unity3d 2d


【解决方案1】:

实现允许这样做的按钮的一种方法是创建自己的按钮,实现必要的接口,如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 的游戏对象上,比如Image

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 2022-10-02
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    相关资源
    最近更新 更多