Unity Splines 参考手册

适用版本:Unity 2022.2+(com.unity.splines

📌 1. SplineContainer 扩展属性

属性 类型 说明
Edit Mode Enum 编辑器中是否允许直接编辑样条(只读 / 可编辑)
Default Tangent Mode Enum 新建 Knot 时的默认切线模式(Auto / Linear / Bezier / Mirrored)
Resolution int 曲线评估时的采样精度,影响性能与精度

提示Resolution 越高,曲线评估越平滑,但性能开销也更大。


📌 2. BezierKnot 扩展字段

除了 PositionTangentInTangentOutRotation,还包含:

字段 类型 说明
TangentMode Enum 控制切线模式(Auto / Linear / Bezier / Mirrored)

📌 3. SplineUtility 完整 API

方法签名 功能说明
EvaluatePosition(Spline spline, float distance, out float3 position) 按曲线长度采样位置,返回对应坐标点
EvaluateTangent(Spline spline, float distance, out float3 tangent) 按曲线长度采样切线方向,返回归一化向量
EvaluateUpVector(Spline spline, float distance, out float3 up) 按曲线长度采样法线/上向量,受 Knot Rotation 影响
GetLength(Spline spline) 获取样条总长度,内部有缓存
GetNearestPoint(Spline spline, float3 origin, out float3 nearest, out float t) 获取空间点最近的曲线点,同时返回对应归一化参数 t
GetNearestPointIndex(Spline spline, float3 origin) 获取最近 Knot 的索引,用于编辑器辅助逻辑
GetNormalizedInterpolation(Spline spline, float distance) 将距离转换为归一化参数 t ∈ [0,1],非线性映射
ConvertDistanceToNormalizedParameter(float distance) 工具函数:距离 → 参数 t 转换,不依赖具体样条

📌 4. SplineData<T>

用于在样条上存储额外数据(如速度、颜色、宽度等)。

常用方法

  • AddKey(float t, T value) → 在参数位置添加数据点
  • Evaluate(float t) → 在参数位置评估数据值
  • RemoveKey(int index) → 删除数据点

应用场景:在道路样条上存储宽度变化;在动画路径上存储速度曲线。


📌 5. SplineExtrude 参数

属性 说明
Shape 输入的 2D 形状
Resolution 挤出采样精度
Collider 是否生成碰撞体

📌 6. SplineInstantiate 参数

属性 说明
Prefab 要实例化的对象
Count 实例化数量
Mode 分布模式(按距离 / Knot / 随机)

📌 7. SplineTool(编辑器扩展)

  • 提供接口用于编写自定义工具,扩展 Unity Editor 中的样条操作。
  • 可用于:
    • 自定义 Inspector 面板
    • Scene 视图交互工具
    • 批量编辑 Knot 或数据

📌 8. 常用场景总结

  • 路径长度计算SplineUtility.GetLength
  • 最近点查找SplineUtility.GetNearestPoint
  • 自定义数据存储SplineData<T>
  • 编辑器扩展SplineTool

posted @ 2026-01-13 23:17  高山仰止666  阅读(13)  评论(0)    收藏  举报