获取有关 Android 库的触摸信息

我在 Unity 上有一个 android 游戏,它对触摸的响应速度不够快(从我搜索的内容来看,Unity 在 Android 上确实存在输入延迟问题),所以我正在尝试使用获取触摸数据的方法创建一个 Android 库并将其发送回调用者(我自己在 Unity 上的游戏)。

我认为这样做会轻而易举,但事实证明我似乎无法“轮询”触摸数据,我必须通过事件来获取它。所以我不得不做一些黑客/猜测来获得 Unity 处理触摸的视图,但是当我调用“setOnTouchListener”时,它会覆盖原始侦听器,因此我的 Unity 游戏不再得到任何触摸。

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

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

1)以某种方式轮询触摸信息(而不是附加侦听器),但我找不到任何方法来做到这一点。

2) 或获取前一个监听器,以便在获得所需内容后将其传递给它。

或者当然 3) 放弃并让输入滞后并忍受我因此得到的数百条差评(我刚刚从没有这种滞后的旧引擎迁移了我的游戏,所以我的玩家是狂怒)。


凤凰求蛊
浏览 139回答 1
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 。为此,您将需要 Unity 2018.2 及以上版本。最后,如果您在使用此 API 时遇到任何问题,可以在此论坛中告知他们,我们将尽快修复。
打开App,查看更多内容
随时随地看视频慕课网APP