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

Unity VR移动InteractionRig后EyeInteractor仍在原点生成的问题求助

问题原因及解决方案

核心原因

你的EyeInteractors、CameraRig未继承InteractionRig的位置偏移,本质是这些组件的追踪参考帧未与移动后的Rig绑定,或是OVR追踪空间配置未正确关联Rig层级。

具体修复步骤

1. 调整EyeInteractors的父级层级

  • 确保左右EyeInteractors是InteractionRig内部CameraRig的直接子对象(比如挂载在OVRCameraRig的TrackingSpace节点下),而非场景根节点的独立对象。
  • 若EyeInteractors是脚本动态生成的,修改生成逻辑,将父对象设为InteractionRig内的TrackingSpace或Camera节点,而非默认的场景根。

2. 修正OVR追踪空间绑定

  • 选中InteractionRig内的OVRCameraRig组件,将Tracking Space设置为Local而非World。
  • 把OVRCameraRig的Reference Frame属性手动指定为InteractionRig的根GameObject,确保追踪数据基于Rig位置计算。

3. 修复EyeTrackingRay脚本的空间依赖

  • 打开EyeTrackingRay脚本,替换原LineRenderer起点设置逻辑:不要用独立的location GameObject,直接从当前EyeInteractor的Transform或OVRCameraRig的眼锚点获取起点位置。示例代码:
// 方案1:从当前EyeInteractor的Transform取起点
lineRenderer.SetPosition(0, transform.position);

// 方案2:绑定到OVR官方眼锚点(更稳定)
var ovrCameraRig = FindObjectOfType<OVRCameraRig>();
if(ovrCameraRig != null)
{
    Transform eyeAnchor = isLeftEye ? ovrCameraRig.leftEyeAnchor : ovrCameraRig.rightEyeAnchor;
    lineRenderer.SetPosition(0, eyeAnchor.position);
}

4. 强制同步追踪数据

在InteractionRig移动完成后,调用以下代码刷新追踪状态,确保眼动数据同步到新位置:

OVRManager.display.RecenterPose();
OVREyeTracker.Instance.UpdateEyeTracking();

5. 排查动态生成逻辑

若EyeInteractors是教程脚本动态创建的,检查代码中是否硬编码生成位置为Vector3.zero,将生成位置改为基于InteractionRig的本地坐标,比如:

// 假设interactionRigTransform是你的InteractionRig根节点Transform
Vector3 spawnPos = interactionRigTransform.TransformPoint(Vector3.zero);
Instantiate(eyeInteractorPrefab, spawnPos, Quaternion.identity, interactionRigTransform);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:12:01