适用版本: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 扩展字段
除了 Position、TangentIn、TangentOut、Rotation,还包含:
| 字段 |
类型 |
说明 |
| 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 / 随机) |
- 提供接口用于编写自定义工具,扩展 Unity Editor 中的样条操作。
- 可用于:
- 自定义 Inspector 面板
- Scene 视图交互工具
- 批量编辑 Knot 或数据
📌 8. 常用场景总结
- 路径长度计算 →
SplineUtility.GetLength
- 最近点查找 →
SplineUtility.GetNearestPoint
- 自定义数据存储 →
SplineData<T>
- 编辑器扩展 →
SplineTool