如果Hololens 2未进行过目视校准,眼动跟踪系统不会返回任何输入。
"设置"->"系统"->"校准"->"运行目视校准"
首次在 HoloLens 2上启动应用时,系统应会弹出提示,要求用户授予使用眼动跟踪的权限。 如果未显示提示,通常表示未设置“GazeInput”功能。权限提示出现一次后,不会自动再次显示。 如果“已拒绝眼动跟踪权限”,可以在“设置”->“隐私”->“应用”中重置此功能。
在场景中选中MixedRealityToolkit,在Inspector面板中选择Input下的Pointers选项,找到
在场景中选中MixedRealityToolkit,在Inspector面板中选择Input下的Input Data Providers选项,在Input Simulation Server选项下找到
在需要接收凝视的对象上添加EyeTrackingTarget组件即可。
Select Action: 设置Click行为,一般设置成Select。
Voice Select: 设置语音命令Click行为,一般设置成Select。
Dwell Time In Sec: 对象获得焦点后延迟多长时间触发 On Dwell 事件。
On Look At Start (): 当对象被凝视获得焦点时调用一次。
While Looking At Target (): 当对象被凝视期间每帧调用一次。
On Look Away (): 当对象失去焦点时(视线离开时)调用一次。
On Selected (): Click事件,通过凝视提交或语音命令触发。
On Tap Down (): 未调用。
On Tap Up (): 未调用。
//获取凝视输入提供程序
CoreServices.InputSystem.EyeGazeProvider
//null:还没有来自眼动仪的数据;一旦接收到来自眼动仪的数据,将返回true或false。
//false: 眼动跟踪校准无效,将使用头部凝视;
//true:眼动跟踪校准有效;
CoreServices.InputSystem.GazeProvider.IsEyeGazeValid
//判断眼动跟踪是否启用
CoreServices.InputSystem.EyeGazeProvider.IsEyeTrackingEnabled
//判断用户的眼动跟踪校准是否有效
CoreServices.InputSystem.EyeGazeProvider.IsEyeCalibrationValid
//判断当前眼动跟踪数据是否用于注视
CoreServices.InputSystem.EyeGazeProvider.IsEyeTrackingEnabledAndValid
//判断眼动跟踪数据是否可用
CoreServices.InputSystem.EyeGazeProvider.IsEyeTrackingDataValid
//获取凝视的对象
CoreServices.InputSystem.GazeProvider.GazeTarget
//获取视频的方向
CoreServices.InputSystem.GazeProvider.GazeDirection
//获取视线的原点
CoreServices.InputSystem.GazeProvider.GazeOrigin
//有关当前注视目标的信息:HitInfo、HitPosition、HitNormal等。
//保持凝视指针始终打开
PointerUtils.SetGazePointerBehavior(PointerBehavior.AlwaysOn);
//禁用手部射线
PointerUtils.SetHandRayPointerBehavior(PointerBehavior.AlwaysOff);
//仅禁用右手射线
PointerUtils.SetHandRayPointerBehavior(PointerBehavior.AlwaysOff, Handedness.Right);
//将手部射线恢复为默认行为
PointerUtils.SetHandRayPointerBehavior(PointerBehavior.Default);
//强制打开手部射线,无论是否靠近可抓取对象
PointerUtils.SetHandRayPointerBehavior(PointerBehavior.AlwaysOn);
若要禁用手部射线指针,只需在 MRTK 配置设置的“输入”->“指针”中删除“DefaultControllerPointer”即可。