Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Unity2d机器人检测触摸_Android_Unity3d_2d - Fatal编程技术网

Android Unity2d机器人检测触摸

Android Unity2d机器人检测触摸,android,unity3d,2d,Android,Unity3d,2d,如何在unity for android的按钮上检测触摸和长触摸? 我已经尝试过此功能,但如果我触摸屏幕上的任何位置,它将返回true: bool checkTouch() { for(int i = 0; i < Input.touchCount; i++) { TouchPhase tp = Input.GetTouch(i).phase; if(tp == TouchPhase.Began || tp

如何在unity for 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;
    }
bool checkTouch()
{
对于(int i=0;i
实现按钮的一种方法是创建自己的按钮,实现必要的界面,如
ipointerndownhandler、ipointernuphandler

通过这种方式,您可以管理按钮的操作方式,下面是一个示例:

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

请记住将脚本附加到一个可交互的游戏对象上,就像一个图像(tp==TouchPhase.Start | | | tp==TouchPhase.End | | tp==TouchPhase.Stational)一样。把你的逻辑放在不同的状态,就是这样。如果需要按钮,请使用UnityEngine.UI在其中添加GUI画布和按钮。只需按按钮运行无需脚本您在哪里调用checkTouch?@Lotan在脚本中位于按钮GameObjectButtons上,默认情况下与单击和输入触摸一起工作。如果您添加了一个类似MyButtongamObject.GetComponent().onClick.AddListener(()=>{Debug.Log(“Click”);}的侦听器,请选中它@洛坦我需要注册长触摸,而不仅仅是点击