Unity Input.touches-按住延迟时的动作

本文关键字:延迟 Input touches- Unity | 更新日期: 2023-09-27 17:57:33

我希望瓷砖(地图上的对象)只在一次触摸时改变颜色,而在平移或缩放相机时不改变。我已经试了两天了,在谷歌上搜索了一下,似乎都想不通。这看起来很简单。

我已经得到了修复这个问题的代码,但现在我需要添加一个时间延迟,因为原始代码太敏感了,无法触摸。我在想一个"如果(触摸时间>200ms){什么都不做}其他{做一些事情}或类似的事情

这是我的atm:

bool onlyTouched;
void Update()
{
    if (Input.touchCount > 0)
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
        RaycastHit hitInfo;
        if (Input.GetTouch(0).phase == TouchPhase.Began)
        {
            onlyTouched = true;
        }
        if (Input.GetTouch(0).phase == TouchPhase.Moved)
        {
            onlyTouched = false;
        }
        if (Input.GetTouch(0).phase == TouchPhase.Ended)
        {
            if (onlyTouched)
            {
                if (Physics.Raycast(ray, out hitInfo))
                {
                    GameObject ourHitObject = hitInfo.collider.transform.parent.gameObject;
                    if (ourHitObject.GetComponent<Hex>() != null)
                    {
                        Touch_Hex(ourHitObject);
                    }
                    else if (ourHitObject.GetComponent<Unit>() != null)
                    {
                        Touch_Unit(ourHitObject);
                    }
                }
            }
            onlyTouched = false;
        }
    }
}

提前感谢

Unity Input.touches-按住延迟时的动作

我花了一点时间才弄明白。。我创建了两个float start/endtime,并将started和end的时间分别放入其中,而不是在if语句中使用它们来检查它们之间的时间是否小于0.150。

float startTime;
float endTime;
void Update()
{
    if (Input.touchCount > 0)
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
        RaycastHit hitInfo;
        if (Input.GetTouch(0).phase == TouchPhase.Began)
        {
            startTime = Time.time;
        }
        //Debug.Log("Start time is: " + startTime);
        if (Input.GetTouch(0).phase == TouchPhase.Ended)
        {
            endTime = Time.time;
            //Debug.Log("End time is: " + endTime);
            if (endTime - startTime < 0.150f)
            {
                if (Physics.Raycast(ray, out hitInfo))
                {
                    GameObject ourHitObject = hitInfo.collider.transform.parent.gameObject;
                    if (ourHitObject.GetComponent<Hex>() != null)
                    {
                        Touch_Hex(ourHitObject);
                    }
                    else if (ourHitObject.GetComponent<Unit>() != null)
                    {
                        Touch_Unit(ourHitObject);
                    }
                }
            }
        }
    }
}

谢谢你的帮助,让我走上正轨干杯