【问题标题】:Get touch information on an Android Library获取有关 Android 库的触摸信息
【发布时间】:2018-05-18 04:16:31
【问题描述】:

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

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

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

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

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

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

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

谢谢

【问题讨论】:

    标签: c# android unity3d touch


    【解决方案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 论坛中告知他们,我们会尽快修复。

    【讨论】:

    • 谢谢!!!我几乎要哭了 :) 不知道他们正在修复输入 API。我将把这个问题再留几天,因为我在问如何在 Android 端修复(Unity 不是主要话题),有人可能会在未来尝试在 Android 上做类似的事情时发现这个问题出于其他原因的图书馆。
    • 作为反馈,我尝试了新的 API,它确实好多了。在拖动过程中,我使用旧 API 和新 API 获得了位置并计算了距离,如果拖动速度很快,有时距离会超过 200 像素。谢谢!!
    • 很高兴知道它解决了您的问题。不要将旧的 Input API 与新的 API 混合使用,因为 Unity 计划在您将来使用新的时禁用旧的。旧的 API 仍然很慢。使用它应该完全解决您的问题的新的。
    猜你喜欢
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 2014-11-21
    相关资源
    最近更新 更多