它是什么
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 OffsetVisual Point CountRender Line In World Space- 不同状态的 Line Properties