Unity Input.touches - 按下并保持延迟的动作

时间:2016-07-19 10:21:41

标签: c# android unity3d

我希望瓷砖(我的地图上的物体)只能在一次触摸时改变颜色,而在我平移或缩放相机时不会改变。我已经尝试了两天并用Google搜索出来,似乎无法弄明白。看起来很简单。

我已经获得了修复此问题的代码,但现在我需要添加时间延迟,因为原始代码对触摸过于敏感。我在考虑一个" if(触摸时间> 200ms){不做任何事情}其他{做东西}或类似的东西。

以下是我的主题:

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

提前致谢

1 个答案:

答案 0 :(得分:0)

我通过一些修补来弄清楚..我创建了两个浮动开始/结束时间并将开始和结束的时间分别放在这些中,而不仅仅是在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);
                    }
                }
            }
        }
    }
}

感谢您帮助我走上正轨 干杯