unity3d - 即使在确保提供程序可用之后,EyeGazeProvider 仍为 null
问题描述
我正在尝试在 Hololens 2 上记录与眼睛注视数据对应的 Vector3。我的 .csv 输出在编辑器中很好,但在实际 HL2 上运行,我可以验证我的 EyeGazeProvider 是否为空,因此没有数据被记录。在下面的代码(我正在修改的 MS 示例脚本)中,我从未通过“eyeGazeProvider!= null”检查进入循环。
我在 Unity 中为 EyeGaze 启用了该功能,并在 .appxmanifest 中对其进行了验证。此外,我将 XRSDK Windows Mixed Reality Eye Gaze Provider 及其 OpenXR 对应项作为我的输入数据提供程序的一部分。根据需要,我还有一个 EyeGazeInteraction 配置文件。我真的被难住了。
var eyeGazeProvider = CoreServices.InputSystem?.EyeGazeProvider;
if (eyeGazeProvider != null)
{
gameObject.transform.position = eyeGazeProvider.GazeOrigin + eyeGazeProvider.GazeDirection.normalized * defaultDistanceInMeters;
EyeTrackingTarget lookedAtEyeTarget = EyeTrackingTarget.LookedAtEyeTarget;
// Update GameObject to the current eye gaze position at a given distance
if (lookedAtEyeTarget != null)
{
// Show the object at the center of the currently looked at target.
if (lookedAtEyeTarget.EyeCursorSnapToTargetCenter)
{
Ray rayToCenter = new Ray(CameraCache.Main.transform.position, lookedAtEyeTarget.transform.position - CameraCache.Main.transform.position);
RaycastHit hitInfo;
UnityEngine.Physics.Raycast(rayToCenter, out hitInfo);
gameObject.transform.position = hitInfo.point;
}
else
{
// Show the object at the hit position of the user's eye gaze ray with the target.
gameObject.transform.position = eyeGazeProvider.GazeOrigin + eyeGazeProvider.GazeDirection.normalized * defaultDistanceInMeters;
}
}
else
{
// If no target is hit, show the object at a default distance along the gaze ray.
gameObject.transform.position = eyeGazeProvider.GazeOrigin + eyeGazeProvider.GazeDirection.normalized * defaultDistanceInMeters;
}
}
解决方案
推荐阅读
- fetch-api - 如何在 Dialogflow GUI 上使用 fetch 显示 API 数据
- python - google.cloud.storage 允许访问,但 gcsfs 不允许
- python - 如何使用硒刮取新的弹出窗口?
- javascript - 我将如何显示具有自动容器“框架”的图像,但有一些隐藏的超额?
- google-sheets - 日期戳上的 ARRAYFORMULA 到 SUMIF
- docker - 在连接到本地数据库的 docker 容器中运行 alembic
- java - 如何从带有拆分的文本文件中输出特定的列/值?
- javascript - 将下拉列表反应到 API 中的 POST 值
- powershell - PowerShell:“未找到位置参数”
- postgresql - 仅在重新加载 Spring Boot 应用程序后更改 PostgreSQL 模式才处于活动状态