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

Unity XR集成场景中所有对象随头部移动旋转故障如何解决

问题根因定位

你遇到的场景对象同步跟随头部运动的核心问题出在代码里的transform.position = hit.point;这一行:

  • 该代码修改的是脚本挂载对象的坐标,如果你的脚本不小心挂载到了XRRig、Camera Offset或者主相机的父节点上,每次射线检测到地面就会直接修改XR相机组的全局坐标,视觉上就会呈现所有场景对象都在跟随头部移动的相对运动效果,并不是场景对象真的在位移。
修复步骤
  • 第一步:先确认脚本挂载位置,把该脚本从所有XR相关节点(XRRig、主相机、Camera Offset)上移除,只挂载到你需要跟随射线碰撞点移动的独立业务对象上。如果你没有需要移动的业务对象,只是要测试Debug射线,直接删除transform.position = hit.point;这行代码即可。
  • 第二步:修正代码里的语法与逻辑错误,修改后的参考代码如下:
public GameObject ground;
public Transform lookCamera;

void Update()
{
   // 兼容lookCamera未赋值的情况,自动取主相机
   Transform camera = lookCamera != null ? lookCamera : Camera.main.transform;
   Ray ray;
   RaycastHit[] hits;
   GameObject hitObject;

   Debug.DrawRay(camera.position,camera.rotation * Vector3.forward * 100.0f);

   ray = new Ray(camera.position, camera.rotation * Vector3.forward);
   // 原代码误用Physics.Raycast,返回所有碰撞结果要用RaycastAll
   hits = Physics.RaycastAll(ray);

   for (int i=0; i<hits.Length; i++)
   {
       RaycastHit hit = hits[i];
       hitObject = hit.collider.gameObject;

       if (hitObject == ground)
       {
          // 修正Debug.Log语法、ToString大小写错误
          Debug.Log("Hit (x,y,z): " + hit.point.ToString("F2"));
          // 仅当你需要移动当前脚本挂载的对象时保留下面这行,否则直接删除
          // transform.position = hit.point;
       }
   }
}
验证排查方法
  • 运行时观察Hierarchy面板中XRRig节点的坐标数值,如果坐标在持续变动,即可确认是脚本挂载错误导致XR相机组被移动
  • 临时注释掉transform.position = hit.point;后运行,如果场景对象不再跟随头部移动,即可完全确认问题来源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 06:06:04