Unity AR Core项目求助:对象与物理绑定相机,需固定于现实世界
问题排查方向:Unity AR Core 对象随相机移动而非固定于现实世界
以下是针对你遇到的「对象/平面随相机移动、投掷物不受手机位移影响」问题的具体排查点:
1. 层级与父级关系检查
- 立刻检查TestCube的父对象:如果它被设为MainCamera或XR Origin的子物体,移动相机时必然会跟着动。必须把投掷对象放在场景根节点下,或者生成时直接关联到检测到的AR Plane节点下(如果需要贴合地面)。
- 确认XR Origin的
Tracking Space设置:在Inspector里找到XR Origin组件,确保它的Tracking Space是RoomScale或Stationary(默认选RoomScale即可),这是AR空间跟踪映射现实世界的基础。
2. 物理系统配置验证
- 看TestCube的Rigidbody组件:千万别勾选
Is Kinematic,勾了之后物体会忽略物理引擎,还会强制继承父对象的运动;同时确保Use Gravity是勾选状态,不然不会下落。 - 检查AR Plane的Collider:AR Plane Manager生成的平面必须带有启用的Collider组件,不然投掷物会直接穿过去,物理交互也不会生效。
- 核对Physics Settings:打开
Edit > Project Settings > Physics,确认Gravity的Y轴是负数(默认-9.81),同时检查Layer设置,确保AR Plane和TestCube所在的Layer在碰撞矩阵里允许互相碰撞。
3. AR会话跟踪状态排查
- 确认AR Session组件正常工作:场景里必须有AR Session和AR Session Origin两个核心组件,且AR Session Origin的Camera字段正确关联到MainCamera,AR Camera Manager组件没有被禁用。
- 检查AR Plane Manager设置:确保
Detection Mode勾选了Horizontal(针对地面平面),Tracked Plane Prefab已经正确赋值,这样检测到平面时才会生成带物理碰撞的平面对象。 - 运行时Debug验证:在代码里加几行
Debug.Log,输出MainCamera的世界坐标和TestCube的世界坐标,对比两者的变化——如果TestCube的世界坐标跟着相机变,那肯定是父级或生成逻辑有问题;如果坐标没动但视觉上跟着走,可能是相机跟踪出了问题。
4. 投掷与生成逻辑修正
- 生成TestCube的位置必须基于世界空间:用
Camera.main.ScreenPointToRay发射射线,检测与AR Plane的交点,以此作为生成位置,绝对不能直接用相机的局部坐标生成对象。 - 投掷力的施加要基于世界方向:给Rigidbody加力时,用
AddForce(forceVector, ForceMode.Impulse),这里的forceVector必须是世界空间下的方向(比如转换相机前方为世界空间方向,而非直接用transform.forward,因为相机移动时这个局部方向会变化)。
相关设置截图
- 项目树:

- XR Origin:

- MainCamera:

- TestCube Object:

内容的提问来源于stack exchange,提问作者neuralBuilder
相关产品推荐
相关产品推荐

