Hololens 凝视

作者:追风剑情 发布于:2023-1-31 15:14 分类:Unity3d

官方文档

目视校准

如果Hololens 2未进行过目视校准,眼动跟踪系统不会返回任何输入。
"设置"->"系统"->"校准"->"运行目视校准"

眼动跟踪权限

首次在 HoloLens 2上启动应用时,系统应会弹出提示,要求用户授予使用眼动跟踪的权限。 如果未显示提示,通常表示未设置“GazeInput”功能。权限提示出现一次后,不会自动再次显示。 如果“已拒绝眼动跟踪权限”,可以在“设置”->“隐私”->“应用”中重置此功能。

开启眼动追踪

在场景中选中MixedRealityToolkit,在Inspector面板中选择Input下的Pointers选项,找到Use Eye Tracking Data并勾选上。

22222.png

Unity中用鼠标模拟凝视

在场景中选中MixedRealityToolkit,在Inspector面板中选择Input下的Input Data Providers选项,在Input Simulation Server选项下找到Default Eye Gaze Simulation Mode并设置为Mouse。

3333.png

示例:凝视对象

在需要接收凝视的对象上添加EyeTrackingTarget组件即可。

11111.png

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 设计中,远距离的手部射线会优先充当焦点指针。 这意味着一旦检测到手,头部和眼部凝视指针将自动抑制,并在说出“选择”后再次显示。 但是,这可能不是你想要的远距离交互方式,你可能更喜欢“凝视并提交”的简单交互方式,视野中是否出现手部对它不会产生影响。

禁用手部射线

若要禁用手部射线指针,只需在 MRTK 配置设置的“输入”->“指针”中删除“DefaultControllerPointer”即可。

标签: Unity3d

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号