【问题标题】:Updating of Touch Input in Unity not working在 Unity 中更新触摸输入不起作用
【发布时间】:2016-09-11 17:00:40
【问题描述】:

我正在制作像乒乓球这样的游戏,除了用户控制两个桨并试图将球保持在界外。我正在使用触摸来控制两个桨。我分配触摸索引的方式是这样的:

     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 的桨。

例如,如果我触摸骑行侧,则将另一根手指放在左侧。我将能够正确地上下拖动我的左侧,但即使我上下移动它,右侧也会保持原位。

问题:我怎样才能让两个桨都完美更新。

【问题讨论】:

  • 这个检查触摸索引代码是否在桨本身上?

标签: c# unity3d


【解决方案1】:

我相信你应该有一个 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);

            // ...
        }
    }
}

【讨论】:

    【解决方案2】:

    Jordan 的回答让您了解了其中的一部分,但没有解释如何获得哪个触摸属于哪个桨。

    目前,由于您在两个桨上都有相同的代码,因此两个桨将分配给它们相同的触摸。

    您需要一些能够将桨侧的第一次触摸分配给它的东西。

    我在 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;
            // }
    
        }
    }
    

    最好的方法是在第一次注册触摸时分配触摸,而不是在每一帧上循环遍历此代码。 祝你的项目好运。

    【讨论】:

      猜你喜欢
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      • 2014-12-06
      • 1970-01-01
      • 2019-11-30
      • 2016-11-21
      • 2021-10-22
      相关资源
      最近更新 更多