# curve-movement

沿样条路径对相机或对象进行动画。提供两个具体子类：`CurveMovementCamera` 和 `CurveMovementObject`。

```typescript
import { CurveMovementObject } from 'u-space/plugins/curve-movement';
import { Vector3 } from 'three/webgpu';

const movement = new CurveMovementObject(viewer, myModel);
movement.setFromPoints([
  new Vector3(0, 0, 0),
  new Vector3(10, 2, 0),
  new Vector3(20, 0, 10),
]);
movement.speed = 0.05;    // 每秒进度
movement.loop = 'repeat'; // 'once' | 'repeat' | 'pingpong'
movement.autoLookAt = true;

movement.play();
// movement.pause() / movement.resume() / movement.stop()

// 监听事件
movement.addEventListener('update', ({ progress }) => console.log(progress));
movement.addEventListener('complete', () => console.log('完成'));
```

**`CurveMovement` 属性：**

| 属性            | 类型                               | 默认值    | 说明                                 |
| :-------------- | :--------------------------------- | :-------- | :----------------------------------- |
| `path`          | `Curve<Vector3> \| null`           | `null`    | 样条路径。                           |
| `progress`      | `number`                           | `0`       | 当前归一化进度（0–1）。              |
| `speed`         | `number`                           | `0.1`     | 每秒进度单位。                       |
| `loop`          | `'once' \| 'repeat' \| 'pingpong'` | `'once'`  | 循环行为。                           |
| `autoLookAt`    | `boolean`                          | `true`    | 朝向路径切线方向。                   |
| `lookAtOffset`  | `number`                           | `0`       | Y 轴旋转偏移量（弧度）。             |
| `positionOffset`| `Vector3`                          | `(0,0,0)` | 叠加到每个位置上的世界坐标偏移量。   |
| `direction`     | `1 \| -1`                          | `1`       | 当前行进方向。                       |
