You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity环境下无法获取Windows MR控制器输入问题咨询

解决Mixed Reality控制器输入获取问题

嘿,我之前也踩过类似的坑——原生Unity Input系统对Mixed Reality控制器的支持确实不够直观,你用的Input.GetButton("Button 14 ")大概率是因为按钮名称问题,加上原生系统对MR设备的适配有限,才拿不到输入。下面给你两种靠谱的解决思路:

方案一:用MRTK(更推荐)

Mixed Reality Toolkit是微软官方专门为MR场景做的工具包,对控制器输入的处理比原生Input顺畅太多,步骤也简单:

  1. 先在Package Manager里搜索并导入Mixed Reality Toolkit核心包
  2. 通过菜单Mixed Reality > Toolkit > Add to Scene and Configure把MixedRealityToolkit对象加到场景里,跟着向导配置好基础设置
  3. 绑定输入事件有两种方式:
    • 代码绑定:实现IMixedRealityInputHandler接口来监听输入,示例代码如下:
      using Microsoft.MixedReality.Toolkit.Input;
      using UnityEngine;
      
      public class MRControllerInput : MonoBehaviour, IMixedRealityInputHandler
      {
          private void OnEnable()
          {
              CoreServices.InputSystem.RegisterHandler<IMixedRealityInputHandler>(this);
          }
      
          private void OnDisable()
          {
              CoreServices.InputSystem.UnregisterHandler<IMixedRealityInputHandler>(this);
          }
      
          public void OnInputDown(InputEventData eventData)
          {
              // 监听Select动作(对应控制器的扳机键)
              if (eventData.MixedRealityInputAction == MixedRealityInputAction.Select)
              {
                  Debug.Log("扳机键按下了!");
                  // 这里写你的业务逻辑
              }
              // 也可以监听Menu键等其他动作
              else if (eventData.MixedRealityInputAction == MixedRealityInputAction.Menu)
              {
                  Debug.Log("菜单键按下了!");
              }
          }
      
          public void OnInputUp(InputEventData eventData)
          {
              // 按钮抬起时的逻辑
          }
      }
      
    • 可视化绑定(不用写代码):给目标对象加个Input Action Handler组件,直接在面板里选要监听的动作(比如Select、Menu),然后绑定对应的方法就行

方案二:修正原生Input的用法(如果不想用MRTK)

要是你坚持用原生Input,得先确认按钮映射和名称是否正确:

  • 先检查Edit > Project Settings > Input Manager里的Axes列表,看看有没有对应MR控制器的按钮配置
  • 你代码里的"Button 14 "末尾多了个空格,这很可能是问题!先去掉空格试试:if (Input.GetButton("Button14"))
  • 可以用一段测试代码来找出正确的按钮名称:
    void Update()
    {
        // 遍历前20个按钮,打印按下的那个的名称
        for (int i = 0; i < 20; i++)
        {
            string btnName = "Button" + i;
            if (Input.GetButtonDown(btnName))
            {
                Debug.Log("当前按下的按钮是:" + btnName);
            }
        }
    }
    
    运行游戏后按控制器上的按钮,看控制台输出的名称,用这个正确名称来判断输入就行

额外要注意的点

  • 确保你的MR控制器已经正确连接,在Window > Analysis > Input Debugger里能看到实时的输入信号
  • 如果是Hololens 2这类设备,要在Player Settings里开启Virtual Reality Supported,并选择Windows Mixed Reality作为平台

内容的提问来源于stack exchange,提问作者Bilbo Baggins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:33:01