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

Unity开发HoloLens 2:仅禁用按钮的Air-tap点击功能

仅禁用按钮Air-tap点击,保留GGV指针的实现方案

针对混合现实场景中需要保留GGV(凝视/手势/语音)指针,但单独禁用按钮的Air-tap触发功能的需求,以下是具体实现方案(以MRTK框架为例,其他框架可参考核心思路):

方法一:修改按钮交互组件的输入权限

MRTK中的Interactable组件是控制按钮交互逻辑的核心,直接修改它的输入允许模式即可:

  • 在Inspector面板中找到按钮的Interactable组件,展开Interaction Settings
  • 在Allowed Input Modes选项中,取消勾选Gesture(或更精准的AirTap选项,依MRTK版本而定),同时确保Gaze选项处于勾选状态
  • 这样设置后,GGV指针仍会正常跟随凝视,但Air-tap手势不会触发按钮的点击事件

如果需要通过代码动态设置,可使用以下脚本:

using Microsoft.MixedReality.Toolkit.UI;
using UnityEngine;

public class DisableButtonAirTap : MonoBehaviour
{
    private Interactable _interactable;

    private void Start()
    {
        _interactable = GetComponent<Interactable>();
        // 移除AirTap对应的手势输入权限
        _interactable.AllowedInputModes &= ~InputModes.Gesture;
        // 确保保留凝视输入,维持指针显示
        _interactable.AllowedInputModes |= InputModes.Gaze;
    }
}

方法二:拦截Air-tap事件传递

如果不想修改Interactable的全局设置,可通过事件拦截的方式阻止Air-tap触发按钮:

  • 给按钮添加如下脚本,实现IMixedRealityPointerHandler接口,在点击事件中判断是否为AirTap手势并阻止事件传递:
using Microsoft.MixedReality.Toolkit.Input;
using UnityEngine.EventSystems;

public class BlockAirTapOnButton : MonoBehaviour, IMixedRealityPointerHandler
{
    public void OnPointerClicked(MixedRealityPointerEventData eventData)
    {
        // 判断触发点击的指针是否为手势指针(对应AirTap)
        if (eventData.Pointer is GesturePointer)
        {
            // 标记事件已处理,阻止后续传递到按钮
            eventData.Use();
        }
    }

    // 实现接口其他方法,无需额外逻辑
    public void OnPointerDown(MixedRealityPointerEventData eventData) {}
    public void OnPointerDragged(MixedRealityPointerEventData eventData) {}
    public void OnPointerUp(MixedRealityPointerEventData eventData) {}
}

核心思路总结

无论使用哪种框架,核心逻辑都是将指针的显示/追踪逻辑与按钮的点击触发逻辑分离:

  • 保留指针的凝视追踪渲染,确保GGV指针正常工作
  • 仅移除或拦截按钮对Air-tap手势的响应绑定,不影响其他远距离交互的显示部分

内容的提问来源于stack exchange,提问作者Aparajith Sairam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:05:12