更新Unity中的触摸输入不起作用

时间:2016-05-15 23:47:38

标签: c# unity3d

我正在制作像乒乓球这样的游戏,除了用户控制两个拨片并试图将球保持在一定范围内。我用触摸控制两个拨片。我分配触摸索引的方式如下:

     public void checkTouchIndex() {
    if (Input.touchCount <= 1)
    {
        touchPos = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position);
        if (touchPos.x < 0)
        {
            Debugger.il = "Touch Index = 0";
            myTouch = Input.GetTouch(0);
        }

    }
    if (Input.touchCount >= 1)
    {
        touchPos = Camera.main.ScreenToWorldPoint(Input.GetTouch(1).position);
        if (touchPos.x < 0)
        {

            Debugger.il = "Touch Index = 1";
            myTouch = Input.GetTouch(1);

        }
    }
    else
        Debugger.il = "Side not touched";
}

以下是移动实际球拍的代码:

     public void checkMovementTouch() {
    if (Input.touchCount > 0)
    {
        //assigns touch index
        checkTouchIndex();

        touchPos = Camera.main.ScreenToWorldPoint(myTouch.position);

        if (touchPos.x > 0)
        {

            //Begin Section: Touch left side
            if (touchPos.y > 0)
            {
                //moves upwards
                move(true);
            }
            else
            {
                //moves downwards
                move(false);

            }
            //End of section
        }

    }

}

注意:Debugger只是在屏幕上显示触摸的侧面和触摸的x位置的文本。但是我很难更新。您应该能够拖动手指并让桨跟随它,但经过一些测试后我发现只有一个桨正确更新以跟随手指,并且它始终是索引为1的桨。

例如,如果我触摸骑行侧,则在左侧放置另一个手指。我可以正确地向上和向下拖动左侧,但是右侧,即使我上下移动,也会保持不变。

问题:如何让两个拨片完美更新。

2 个答案:

答案 0 :(得分:2)

我相信你应该有一个for循环遍历所有的触摸。 Here is some documentation on Input.GetTouch

void Update() 
{

    if (Input.touchCount > 0)
    {
        for (int i = 0; i < Input.touchCount; i++) 
        {
            myTouch = Input.GetTouch(i);

            // ...
        }
    }
}

答案 1 :(得分:1)

乔丹的回答让你在那里找到了一部分,但没有解释如何获得属于哪种划水的触摸。

目前,由于两个拨片上都有相同的代码,因此两个拨片都会分配相同的触控。

你需要一些能够在桨叶侧面进行第一次触摸的东西。

我在Jordans的回答中添加了一些伪代码,让你弄清楚确切的实现。

if (Input.touchCount > 0)
{
    for (int i = 0; i < Input.touchCount; i++) 
    {
        touchPos = Camera.main.ScreenToWorldPoint(Input.GetTouch(i));

        // if(touchPos.x is on my side)
        // {
        //    myTouch = touchPos;
        // }

    }
}

最好的方法是在首次注册触摸时指定触摸,而不是在每帧上循环显示此代码。 祝你的项目好运。

相关问题