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

Unity中Oculus Quest虚拟与真实房间精准对齐操作求助

解决Oculus Quest中VR虚拟房间与真实房间精准对齐的问题

嘿,我太懂你这种想让虚拟和真实房间精准重合的执念了!之前帮朋友搞定过类似的Oculus Quest对齐问题,结合你提到的对齐脚本思路,给你一步步拆解具体操作,哪怕没开发背景也能跟着做:

一、前期场景准备

  • 确保你的1:1复刻3D房间模型已经导入Unity场景,并且模型的真实空间坐标要和你现实房间完全匹配(比如现实中桌子在你站立点正前方1米,虚拟模型里的桌子也要在场景原点正前方1米)
  • 已经在Unity里配置好Oculus XR插件(如果还没弄,先去Package Manager搜索安装「Oculus XR Plugin」,跟着向导完成基础的VR环境设置)

二、代码的创建与放置

  1. 在Unity编辑器的Project窗口右键 → 选择「Create」→「C# Script」,把脚本命名为RoomAligner
  2. 双击打开脚本,把默认的代码全部删掉,替换成下面这段:
using UnityEngine;
using UnityEngine.XR;

public class RoomAligner : MonoBehaviour
{
    // 储存校准后的位置和旋转偏移量
    private Vector3 calibratedPosition;
    private Quaternion calibratedRotation;
    private bool isCalibrated = false;

    void Update()
    {
        // 按下Oculus Quest的A键触发校准(可修改为其他按键)
        if (Input.GetKeyDown(KeyCode.JoystickButton0))
        {
            if (!isCalibrated)
            {
                RecordCalibration();
                isCalibrated = true;
                Debug.Log("校准完成!虚拟房间已与真实房间对齐");
            }
            else
            {
                ResetCalibration();
                isCalibrated = false;
                Debug.Log("已重置校准状态");
            }
        }

        // 已校准状态下,实时修正相机位置
        if (isCalibrated)
        {
            ApplyCalibration();
        }
    }

    // 记录当前头显位置作为校准基准
    private void RecordCalibration()
    {
        InputTracking.GetLocalPosition(XRNode.Head, out Vector3 headPos);
        InputTracking.GetLocalRotation(XRNode.Head, out Quaternion headRot);

        // 计算偏移量,让虚拟房间原点与真实校准点重合
        calibratedPosition = -headPos;
        calibratedRotation = Quaternion.Inverse(headRot);
    }

    // 应用校准偏移,实现双房间对齐
    private void ApplyCalibration()
    {
        Transform cameraTransform = Camera.main.transform;
        cameraTransform.localPosition = calibratedPosition;
        cameraTransform.localRotation = calibratedRotation;
    }

    // 重置校准参数
    private void ResetCalibration()
    {
        calibratedPosition = Vector3.zero;
        calibratedRotation = Quaternion.identity;
    }
}
  1. 把这个做好的脚本,直接拖到场景里的XR Origin(VR Camera)对象上——就是那个包含Main Camera的父对象,Oculus XR插件配置后会自动生成这个对象

三、具体操作流程

  1. 先在真实房间里站到你预设的「校准原点」(比如你建模时设定的房间中心点,或者现实中某个固定的参考点,比如真实桌子的边缘)
  2. 启动VR应用:可以先在Unity里用Play模式测试,或者打包到Oculus Quest上运行
  3. 戴上头显,此时看到的虚拟房间和真实房间会有设备初始定位的偏差
  4. 按下头显的A键(代码里默认绑定的是A键),系统会立刻记录当前头显的位置,自动修正虚拟房间的视角——你会瞬间看到虚拟桌子和真实桌子完全重合!
  5. 如果之后设备重启、定位漂移,重复步骤1-4重新校准就行

四、关键注意事项

  • 每次校准必须站在同一个固定的真实位置,否则对齐会出错
  • 想改触发校准的按键?把代码里的KeyCode.JoystickButton0换成其他值就行:比如JoystickButton1对应X键,JoystickButton2对应B键,JoystickButton3对应Y键
  • 打包到Quest时,一定要在Player Settings里开启「Room Scale」模式,不然定位精度会大打折扣
  • 遇到轻微定位漂移时,随时按校准键重新修正就行,脚本会实时调整相机位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:27:49