【问题标题】:How to map an Android keycode to a Unity keycode?如何将 Android 键码映射到 Unity 键码?
【发布时间】:2021-12-10 19:07:39
【问题描述】:

我正在尝试让 Vizux M400 的触摸板在 Unity 中工作。 Vuzix 在 Android 上运行,我知道例如触摸板向前滑动是使用 android 键码 KEYCODE_DPAD_RIGHT (22) 处理的。

我现在如何将此键码映射到 Unity 中的键码,以便我可以访问它?我听说我可能需要为此创建一个插件,但我不知道从哪里开始创建这样的插件。 (侧面信息:在 Unity 中,触摸屏上的点击被接收为 Mouse0,但无法识别用 2 根手指点击。所以我猜这些默认情况下没有映射)

感谢您的帮助,谢谢!

【问题讨论】:

    标签: android unity3d input keycode vuzix


    【解决方案1】:

    我没有设备,所以我很难测试。通常,您可以使用以下方法检查任何可识别设备的 KeyCode。

    // Put this in Update OR OnGUI
    if (Input.anyKeyDown)
    {
        Event e = Event.current;
        if (e.isKey)
        {
            Debug.Log(e.keycode.ToString())
        }
    }
    

    找到keycode后,使用以下代码检查状态:

    KeyCode KEYCODE_DPAD_RIGHT = (KeyCode)(<insert your found keycode>)
    if (SystemInfo.deviceModel.ToLower().Contains("vuzix"))
    {
        if (Input.GetKeyDown(KEYCODE_DPAD_RIGHT))
        {
            // Do anything
        }
    }
    

    编辑 1

    我相信您可以通过明确告诉 Unity 检查不同的 KeyCode 来实现此功能:

            for (int i = 0; i < 1000; i++)
            {
                try
                {
                    if (Input.GetKeyDown((KeyCode)i))
                    {
                        j++;
                        dText.text = j +" with: "+ i.ToString();
                        Debug.Log("Working");
                        break;
                    }
                }
                catch
                {
                }
            }
    

    编辑 2

    在更新中运行此代码,然后点击您的按钮和滑动/触摸操作发送垃圾邮件。您可能会收到一个提示,表明该操作已被识别,并且您可以确认这些操作实际上已默认映射到某些键码。

    【讨论】:

    • 感谢您的回答。我已经按照你的建议做了。该设备有 3 个物理按钮和一个可以识别 3 个手指的触摸板。我得到了 3 个物理按钮的 KeyCode(即使是按住按钮或只是按下的不同 KeyCode)以及用 1 根手指和 3 根手指轻敲的触摸板。所以,我没有得到任何用于在触摸板上滑动或用 2 根手指轻敲的 KeyCode。这就是为什么我假设这些没有映射,如Vuzix documentation they have Android KeyCodes
    • 嗯,很有趣。我发现在 Unity 中,对于 vuzix 设备,KEYCODE_DPAD_CENTER 似乎是 (KeyCode)10。对于您的情况,您可以遍历键码并检查它们。检查我的编辑。
    • 你在this thread读到了吗?通过您的编辑,我可以找出未使用哪些键码,但那又如何呢?在我链接的线程中,他们说 Unity 中不使用 KeyCode 10,因此他们可以将 KEYCODE_DPAD_CENTER 绑定到它。但这与要求 if(Input.GetKeyDown(10)) ... 相同,如果 10 没有映射到某个东西,那也没用?
    • 我相信,在我的编辑中,您应该能够执行上述操作(滑动或点击),并从中获取 KeyCodes。至少,您可以测试 Unity 是否至少可以识别您的操作。我看了this link in chinese。它说 KeyCode 10 是默认键码。
    • 谢谢!首先,设备上的触控板也可以当鼠标使用。通常两种手势(如滑动)都会与鼠标同时工作。但在我的应用程序中,我必须在设备设置中停用鼠标功能才能通过您的代码接收键码。
    【解决方案2】:

    解决方案就是禁用 Vuzix M400s 触摸板的鼠标功能。它可以在设备设置中完成。

    所以,这些是触摸板的 KeyCode:

        private const KeyCode _oneFingerTapKeyCode = (KeyCode)330;
        private const KeyCode _oneFingerHoldKeyCode = (KeyCode)319;
        private const KeyCode _oneFingerSwipeBackKeyCode = (KeyCode)276;
        private const KeyCode _oneFingerSwipeForwardKeyCode = (KeyCode)275;
        private const KeyCode _oneFingerSwipeUpKeyCode = (KeyCode)273;
        private const KeyCode _oneFingerSwipeDownKeyCode = (KeyCode)274;
        private const KeyCode _twoFingerTapKeyCode = (KeyCode)27;
        private const KeyCode _twoFingerHoldKeyCode = (KeyCode)278;
        private const KeyCode _twoFingerSwipeForwardKeyCode = (KeyCode)127;
        private const KeyCode _twoFingerSwipeBackKeyCode = (KeyCode)8;
    

    我已经在不同线程的某个地方看到过它们,但我认为它们不起作用,但这只是鼠标输入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 2021-08-27
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多