如何在MRTK3 HoloLens2中切换头部凝视与眼部凝视?
HoloLens2 MRTK3 头部凝视与眼部凝视切换实现方案
核心逻辑
MRTK3通过输入数据提供者管理不同凝视源,切换凝视方式本质就是启用/禁用对应的凝视提供者,同时确保光标绑定到目标凝视源。
静态配置切换(编辑时设置)
如果不需要运行时动态切换,直接在输入配置文件中修改:
- 打开MRTK配置管理器:
Window > Mixed Reality > MRTK3 Configuration - 切换到Input标签页,找到你的输入配置文件(默认是
DefaultMixedRealityInputSystemProfile) - 展开Gaze Settings下的Gaze Providers列表:
- 取消勾选
EyeGazeDataProvider的Enabled,禁用眼部凝视 - 勾选
HeadGazeDataProvider的Enabled,启用头部凝视(如果列表里没有这个提供者,点击Add Data Provider选择添加)
- 取消勾选
- 检查Cursor Settings:默认配置下MRTK会自动优先使用启用的凝视源,无需额外调整光标绑定
运行时动态切换(代码实现)
需要通过按钮、手势等触发运行时切换的话,使用以下脚本:
using Microsoft.MixedReality.Toolkit.Input; using UnityEngine; public class GazeModeSwitcher : MonoBehaviour { // 切换为头部凝视 public void EnableHeadGaze() { var inputSystem = MixedRealityToolkit.Instance.ActiveInputSystem; if (inputSystem == null) return; // 禁用眼部凝视提供者 inputSystem.GetDataProvider<IEyeGazeDataProvider>()?.Disable(); // 启用头部凝视提供者 inputSystem.GetDataProvider<IHeadGazeDataProvider>()?.Enable(); // 强制光标绑定头部凝视源 inputSystem.CursorInputModule?.CursorManager?.SetCursorGazeSource(InputSourceType.Head); } // 切换为眼部凝视 public void EnableEyeGaze() { var inputSystem = MixedRealityToolkit.Instance.ActiveInputSystem; if (inputSystem == null) return; inputSystem.GetDataProvider<IHeadGazeDataProvider>()?.Disable(); inputSystem.GetDataProvider<IEyeGazeDataProvider>()?.Enable(); inputSystem.CursorInputModule?.CursorManager?.SetCursorGazeSource(InputSourceType.Eyes); } }
- 将脚本挂载到场景中任意GameObject上
- 在UI按钮的点击事件中,分别绑定
EnableHeadGaze()和EnableEyeGaze()方法即可触发切换
验证要点
- 部署到HoloLens2或进入Play模式后,切换到头部凝视时,光标应跟随头部转动方向
- 测试对象选择:确保
Interactable组件能响应头部凝视的聚焦与选择操作 - 切换回眼部凝视时,光标应恢复跟随眼球移动
内容的提问来源于stack exchange,提问作者luzylulilu
相关产品推荐
相关产品推荐

