为了账号安全,请及时绑定邮箱和手机立即绑定

获取有关 Android 库的触摸信息

获取有关 Android 库的触摸信息

C#
凤凰求蛊 2021-06-15 22:33:25
我在 Unity 上有一个 android 游戏,它对触摸的响应速度不够快(从我搜索的内容来看,Unity 在 Android 上确实存在输入延迟问题),所以我正在尝试使用获取触摸数据的方法创建一个 Android 库并将其发送回调用者(我自己在 Unity 上的游戏)。我认为这样做会轻而易举,但事实证明我似乎无法“轮询”触摸数据,我必须通过事件来获取它。所以我不得不做一些黑客/猜测来获得 Unity 处理触摸的视图,但是当我调用“setOnTouchListener”时,它会覆盖原始侦听器,因此我的 Unity 游戏不再得到任何触摸。所以我的问题是:关于如何解决这个问题的任何建议?据我所知,我可以通过以下两个选项之一解决它:1)以某种方式轮询触摸信息(而不是附加侦听器),但我找不到任何方法来做到这一点。2) 或获取前一个监听器,以便在获得所需内容后将其传递给它。或者当然 3) 放弃并让输入滞后并忍受我因此得到的数百条差评(我刚刚从没有这种滞后的旧引擎迁移了我的游戏,所以我的玩家是狂怒)。
查看完整描述

1 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

您描述的问题是 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 时遇到任何问题,可以在此论坛中告知他们,我们将尽快修复。


查看完整回答
反对 回复 2021-06-20
  • 1 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信