两个关于VR模式下的问题:

问题一:widget上的UI无法更新

描述:VR模式下,游戏暂停时(set game paused),UMG上继承父类user widget类的按钮无法改变背景颜色2D下可以,VR不可用。

原因

Set Game Paused(true)会冻结3D Widget的Slate渲染更新

  • 2D是屏幕空间UI,不受游戏暂停影响
  • VR/3D Widget是世界空间UI,属于Actor/Scene组件,暂停时样式、颜色、Brush 刷新被冻结

解决

给3D Widget Component开「暂停时也更新」

找到场景里放菜单的Widget Component,右侧 Details 搜索:

  • Tick When Paused = true
  • Receive Hardware Input = true

问题二:光束Interaction没有正常显示问题

描述:VR模式下,在飞行游戏中,光束Interaction没有正常显示

原因:在飞行时,高速运动物体和射线延迟问题,机高速移动,世界坐标变化极快,WidgetInteraction默认是延迟一帧更新射线

解决

将WidgetInteraction的Tick group设置为PostPhysics,不要用PrePhysics。

Tick Group(心跳组)决定了组件在每一帧的哪个具体时间点执行代码。
对于 WidgetInteractionComponent(Widget交互组件)来说,它决定了“射线检测(Raycast)”与“物体移动”谁先谁后的问题。

Tick Group执行时机物理数据状态对 WidgetInteraction 的影响适用场景
PrePhysics物理模拟之前旧数据 (上一帧的位置)最准确。在物体移动前就判定交互,避免“穿模”。VR交互首选、快速移动物体的抓取。
DuringPhysics物理模拟期间不确定 (可能旧可能新)不推荐。判定时间不稳定,可能导致交互闪烁。仅用于更新不依赖物理的UI(如小地图)。
PostPhysics物理模拟之后最新数据 (这一帧的最终位置)可能有延迟。物体已经移动完了才检测,快速移动时射线可能会“打空”。需要基于物体最终静止位置的逻辑(如激光瞄准)。
PostUpdateWork所有更新之后最终状态延迟最大。通常用于渲染前的最后准备。粒子特效同步、摄像机依赖的逻辑。