Unity Input.Touches如果保持触摸什么都不做?

时间:2016-07-17 08:30:51

标签: c# android unity3d

...新手 学习Unity制作手机游戏,我有一个小的六角形网格地图,当触摸时,瓷砖会变成随机颜色。我有一个相机的脚本,用手指按下它并用两根手指放大。

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

以下是当光线投射到达对象时从Update()调用的代码。这只是改变了十六进制的颜色,但我希望它只在不平移或缩放相机时才能这样做。

void Touch_Hex(GameObject ourHitObject)
{
    Touch[] touches = Input.touches;

    if (touches[0].phase == TouchPhase.Ended)
    {
        MeshRenderer mr = ourHitObject.GetComponentInChildren<MeshRenderer>();

        mr.material.color = color[Random.Range(0, color.Length)];
    }
}

我已经尝试了所有不同阶段的组合等,但却无法让它按照我的意愿运行。我认为deltaTime或deltaPostion是答案,但我无法解决。

干杯

1 个答案:

答案 0 :(得分:0)

您需要使用boolean变量和touches[0].phase == TouchPhase.Moved的组合。当touches[0].phase == TouchPhase.Movedtrue时,您的输入现在被视为无效。然后,您可以将boolean变量设置为truefalse,然后再使用它来决定是否更改颜色。

bool onlyTouched;

void Update()
{
    if (Input.touchCount > 0)
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
        RaycastHit hit;

        if (Input.GetTouch(0).phase == TouchPhase.Began)
        {
            //Touched
            onlyTouched = true;
        }


        if (Input.GetTouch(0).phase == TouchPhase.Moved)
        {
            //Moved Finger (Now Invalid!)
            onlyTouched = false;
        }

        if (Input.GetTouch(0).phase == TouchPhase.Ended)
        {
            //Check if only touched then change color
            if (onlyTouched)
            {
                Debug.Log("Only touched Finger");
                //MeshRenderer mr = ourHitObject.GetComponentInChildren<MeshRenderer>();
                //mr.material.color = color[Random.Range(0, color.Length)];

                if (Physics.Raycast(ray, out hit))
                {
                    if (hit.transform != null)
                    {
                        MeshRenderer mr = hit.transform.gameObject.GetComponentInChildren<MeshRenderer>();
                        mr.material.color = color[Random.Range(0, color.Length)];


                        //hit.transform.GetComponent<MeshRenderer>().material.color = Color.red;
                    }
                }
            }
            else
            {
                Debug.Log("Finger was moved while touching");
            }

            //Reset onlyTouched for next read
            onlyTouched = false;
        }
    }
}