获取Android库的触摸信息

时间:2018-05-18 04:16:31

标签: c# android unity3d touch

我在Unity上安装了一款Android游戏,其响应速度不够快(从我搜索到的内容中,Unity确实存在Android上的输入延迟问题),因此我尝试创建一个Android库使用一种方法获取触摸数据并将其发送回调用者(我自己在Unity上的游戏)。

我认为这样做会轻而易举,但事实证明我似乎无法进行民意调查"对于触摸数据,我必须通过事件来获取它。所以我不得不做一些黑客/猜测来获得Unity的流程触摸视图,但是当我调用" setOnTouchListener"它覆盖了原始的听众,所以我的Unity游戏不再有任何接触。

所以我的问题是:关于如何解决这个问题的任何建议?

据我所知,我可以通过以下两个选项中的一个来解决它:

1)以某种方式轮询触摸信息(而不是附加听众),但我无法找到任何方法。

2)或获得前一个听众,这样我就可以在得到我需要的东西之后将其传递给它。

或当然3)放弃并让输入滞后并忍受我因此而得到的数百条不好的评论(我刚刚将我的游戏从一个没有的旧引擎迁移过来这种滞后,所以我的球员都很生气。)

由于

1 个答案:

答案 0 :(得分:1)

您所描述的问题是Unity社区所熟知的。你不需要放弃或制作自己的插件。 Unity多年来一直致力于新的输入系统。它仍处于实验模式,但看起来很有希望。

如果旧的API太慢,您可以通过以下方式触摸屏幕:

void Update()
{
    foreach (Touch touch in Input.touches)
    {
        if (touch.phase == TouchPhase.Began)
        {
            Vector2 touchLocation = touch.position;
        }
    }
}

使用新的低级InputSystem API,您可以获得触摸信息:

public int touchIndex = 0;

void Update()
{
    Touchscreen touchscreen = UnityEngine.Experimental.Input.Touchscreen.current;


    if (touchscreen.allTouchControls[touchIndex].ReadValue().phase != PointerPhase.None &&
               touchscreen.allTouchControls[touchIndex].ReadValue().phase != PointerPhase.Ended)
    {
        Vector2 touchLocation = touchscreen.allTouchControls[touchIndex].ReadValue().position;

    }
}

您可以获取新的InputSystem API here。你需要并且在Unity 2018.2之上。最后,如果您遇到此API的任何问题,可以在this论坛中告知他们,并尽快修复。