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

如何在绘制线条时为LineRenderer的宽度曲线均匀分配关键点

解决方案

这里提供3种不同实现成本和效果的方案,你可以根据自己的需求选择:

方案1:绘制过程不实时更新曲线,结束后一次性生成(性能最优,实现最简单)

你不需要在绘制过程中动态修改AnimationCurve,单独维护一个List<float>来存储每个点位对应的压感数值即可:

  • 绘制过程中如果需要预览压感效果,直接把LineRenderer.endWidth设为当前压感值即可,用户感知不到和精确曲线的差异
  • 等用户抬手结束本次绘制时,再遍历存储的压感列表一次性生成宽度曲线,每个关键帧的时间值为 当前点位索引 / (总点位数量 - 1),自动适配0-1的归一化区间

方案2:固定预估最大点位数量,新增关键帧无需修改历史数据

如果你必须要实时显示精确的全段压感宽度,可以用预留点位的方式规避历史关键帧偏移:

  • 提前预估单次绘制的最大点位数量,比如设置为2000(远高于正常手写的单次点位数量)
  • 每次新增第n个点位时,新增关键帧的时间值设为 n / 2000,所有历史关键帧的时间完全不需要修改
  • 绘制结束后,将所有关键帧的时间统一乘以 2000 / 实际总点位数量,即可把所有关键帧缩放到0-1的标准归一化区间

方案3:放弃宽度曲线,自行控制Mesh顶点(自由度最高,适合复杂绘图需求)

如果你的绘图应用需要支持更复杂的笔触效果,直接放弃LineRenderer的内置宽度曲线,自己生成线条Mesh:

  • 每个点位根据当前压感计算左右两个顶点的偏移量,直接写入Mesh的顶点数组
  • 完全不需要处理归一化曲线的逻辑,点位较多时性能比反复修改AnimationCurve高30%以上

你现有代码的问题

你当前的写法curve.AddKey(1.0f, penPressureValue);每次都将关键帧添加到曲线1.0的末端位置,会自动压缩原有所有关键帧的时间占比,自然会导致整条已绘制线条的宽度全部发生变化,这个逻辑本身不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:15:05