总体判断

旧版 VR 项目虽然已带 XR Origin,但仍混有不少桌面端实现(Win32 文件选择框、鼠标触摸输入、手动多相机切换等)。参考项目 AVersatilePointCloudProcessingPlatform 代码结构更清晰,但本质是普通桌面 3D 项目,包含 Windows 桌面 API、StandaloneFileBrowser、外部进程调用、屏幕像素布局等。

迁移策略不是整段复制,而是:

  1. 保留实验业务逻辑:质量评价、JND 判断、点云读取、结果记录。
  2. 替换桌面交互层:文件选择、弹窗、鼠标控制、窗口按钮。
  3. UI 与模型交互接到 VR 体系:World Space Canvas、XRUIInputModule、TrackedDeviceGraphicRaycaster、NearFarInteractor、Input Actions。

不适用项与解决方案

P0:必须先替换

不适用项为什么不适合 VR建议解决方案
Windows 原生文件/保存对话框(Comdlg32.dll、LocalDialog.GetOpenFileName、StandaloneFileBrowser.OpenFilePanel / SaveFilePanel) 依赖 Windows 桌面窗口。Oculus 头显或 Android 平台无法使用,PCVR 也会打断沉浸感 抽象 IPathPicker。当前保留世界空间输入框手动填写路径;下一阶段做 VR 内文件 / 目录选择面板;仅 PCVR 时可用 #if UNITY_STANDALONE_WIN && !UNITY_ANDROID 临时实现
Win32 MessageBox 与桌面退出确认(Win32API.ConfirmMessageBox + Application.Quit(0)) VR 中没有传统桌面弹窗;弹出系统窗口会脱离头显交互;强制退出不利于实验恢复 做 World Space AlertPanel / ConfirmPanel,用 XR 射线点击按钮。退出逻辑优先改成"返回 Home 场景"或"结束实验并保存"
鼠标、触摸、旧 Input 输入(Input.GetMouseButtonDown、Input.mousePosition、Mouse ScrollWheel、Input.GetTouch、MouseTouchController、ModelViewerControl) VR 主要输入来自头显、左右手柄、射线、抓取、扳机键和摇杆。鼠标/触摸逻辑不能代表 VR 操作 用 XR Interaction Toolkit 的 Input Actions;交互器改 NearFarInteractor

P1:尽快替换

不适用项为什么不适合 VR建议解决方案
路径策略:硬编码 D:\...、f:\ 等 Windows 路径 VR 项目要能部署到 Quest 等 Android 设备;路径策略必须可移植 用 Application.persistentDataPath + PathPicker 抽象;配置文件 / 用户数据落到该路径下
结果保存:直接写 Application.dataPath 或本地 C:\ Android 平台无写权限;实验数据丢失风险 实验数据走 Application.persistentDataPath;如需导出,再走显式导出流程
外部进程调用(System.Diagnostics.Process 启动 FFmpeg、点云工具) Quest / Android 不支持;进程管理与状态读取都不一致 改用 Unity 内的等价实现(FFmpegNative、PointCloudNative);必要时后台服务化
模型加载:File.ReadAllBytes + 同步 IO 大文件加载卡帧;Android 上更明显 改 UnityWebRequest / async/await + 进度反馈
VR 配置输入体验:ConfigPanel 等用 Input.GetKey 做快捷键 VR 中无键盘;快捷键失效 把"快捷键"换成"扳机 + 手柄按键组合";或保留 PCVR 调试模式

P2:最后清理

不适用项说明
旧事件引用(UnityAction、UnityEvent 直接挂载旧 MonoBehaviour)老项目习惯在新项目里要把这些迁移到 XRI 的 UnityEvent 钩子
协程重构(StartCoroutine + WaitForSeconds 满天飞)逐步换 async/await 或 UniTask;更易取消
点云渲染性能:每个点 GameObject改 Graphics.DrawMeshInstancedIndirect / ComputeShader
实机舒适距离:模型离用户太近检查最小可视距离 ≥ 0.5m;HUD 元素远离 IPD

建议解决顺序

  1. P0:World Space UI、XRUIInputModule、Win32 弹窗替换、桌面文件选择替换、旧输入替换。
  2. P1:路径策略、结果保存、外部进程剥离、模型加载策略、VR 配置输入体验。
  3. P2:旧事件引用清理、协程重构、点云渲染性能、实机舒适距离。

下一步建议

建议先做通用 VR 弹窗系统 VRAlertPanel,替代旧项目和参考项目的 AlertManager、Win32API.MessageBox 与 Debug.Log 提示。这个组件完成后,质量评价和 JND 两个场景的校验错误、路径为空、实验结束提示都可以统一接入。

第二步做路径选择策略:短期保留输入框和默认路径;中期加一个 VR 内部配置预设列表;长期再根据实际部署平台决定是否做完整 VR 文件浏览器。

参考资料