它是什么

CurveVisualController 是用于控制 LineRenderer 的可视化组件。它基于实现了 ICurveInteractionDataProvider 的交互器所提供的数据,生成一条可视化曲线。

它结合可配置的起点、方向以及来自曲线数据提供者的终点数据,生成贝塞尔曲线,掩盖不同起点之间的差异,也能掩盖某些稳定化处理带来的视觉偏差。

它会根据曲线数据提供者的状态动态调整线条视觉属性:

  • 命中 UI
  • 命中普通可交互对象
  • 处于选中状态
  • 没有命中有效目标

一句话定位:

CurveVisualController 负责"看起来像不像一条好用的 XR 射线",不负责"到底有没有打中"。

能力

  • 支持不同线条动态模式:Traditional、RetractOnHitLoss、ExpandFromHitPoint
  • 自定义视觉设置:曲线点数、最大曲线距离
  • 控制线条收缩、扩展、回弹等动态效果
  • 复杂曲线中点计算与吸附选项
  • 按不同状态切换颜色渐变
  • 按不同终点类型定制线条属性
  • "空命中"切换材质,避免深度冲突
  • 可能时用 Burst 加速复杂曲线数学计算

属性(按状态分组)

属性作用
Line Renderer被控制的 LineRenderer。
Curve Visual Object数据源。一般来自 NearFarInteractor 这类实现曲线数据接口的对象。
Override Line Origin是否覆盖默认线起点。
Line Origin Transform自定义起点和方向的 transform。
Customize Line Properties For State是否按状态定制线条属性。
Line Property Animation Speed状态切换时线宽变化速度。
No Valid Hit Properties无有效命中时的线条样式。
UI Hit Properties命中 UI 时的样式(如按钮高亮)。
UI Press Properties按下 UI 时的样式(点击反馈)。
Hover Hit Properties命中 3D 可交互对象时的样式(模型悬停)。
Select Hit Properties已选中时的样式。

线条几何

Smoothly Curve Line / Line Bend Ratio / Adjust Width / Start Width / End Width / Adjust Gradient / Gradient / Expand Mode Line Draw Percent 等。

高级

Visual Point Count(曲线点数) / Max Visual Curve Distance(可视曲线最大距离) / Resting Visual Line Length(待机长度) / Snap To Selected Attach If Available(吸附到选中附着点) / Snap To Snap Volume If Available(吸附到 Snap Volume) / Curve Start Offset / Curve End Offset(防止穿模) / Render Line In World Space(高速移动抗伪影) / Extend Line To Empty Hit / Extension Rate / Line Dynamics Mode / Retract Delay 等。

在项目中的理解

Home(首页)

关心:

  • 线有没有清晰地指示按钮
  • 悬停和按下时视觉反馈是否明显

质量评价 / JND

还要关心:

  • 命中模型时线条是否和命中状态区分明显
  • 选中后线条是否稳定
  • 线条长度 / 颜色 / 宽度不干扰观察点云

建议:

  • 线条颜色不要太艳,避免喧宾夺主
  • UI 命中与模型命中要有区分
  • 选中状态清楚但不过于闪烁

调试建议

如果你遇到这些现象:

  • 线看起来怪怪的
  • 线头像是插进模型里
  • 选中前后线条状态变化不明显
  • 线在高速移动时有拖影或跳动

优先检查:

  • Curve Start Offset / Curve End Offset
  • Visual Point Count
  • Render Line In World Space
  • 不同状态的 Line Properties

参考资料