95 lines
2.6 KiB
Markdown
95 lines
2.6 KiB
Markdown
# EmotionWave 与 SliderController 同步使用说明
|
||
|
||
## 概述
|
||
|
||
`EmotionWaveManager` 可以自动同步 `SliderController` 的进度,实现滑片位置驱动情绪波形进度的效果。
|
||
|
||
## 设置方法
|
||
|
||
### 1. Inspector 配置
|
||
|
||
在 `EmotionWaveManager` 组件的 Inspector 中:
|
||
|
||
```
|
||
[Header("Slider Sync")]
|
||
- Slider Controller: 拖入场景中的 SliderController 组件
|
||
- Enable Slider Sync: 勾选启用滑片同步(默认启用)
|
||
```
|
||
|
||
### 2. 工作原理
|
||
|
||
当 `Enable Slider Sync` 勾选时:
|
||
- `SliderController` 的 `onSliderPositionChanged` 事件会自动触发
|
||
- `EmotionWaveManager` 接收到事件后更新 `targetProgress`
|
||
- `Update` 中的 smoothstep lerp 会平滑追踪到新进度
|
||
- 最终传递给 `EmotionWaveController` 进行渲染
|
||
|
||
### 3. Yarn 脚本控制
|
||
|
||
#### 启用/禁用同步
|
||
|
||
```yarn
|
||
// 启用滑片同步(情绪波形跟随滑片)
|
||
<<enable_emotion_wave_slider_sync>>
|
||
|
||
// 禁用滑片同步(情绪波形由 Yarn 命令独立控制)
|
||
<<disable_emotion_wave_slider_sync>>
|
||
```
|
||
|
||
#### 典型使用场景
|
||
|
||
```yarn
|
||
// 场景1: 显示情绪波形,同时启用滑片同步
|
||
<<show_emotion_wave>>
|
||
<<enable_emotion_wave_slider_sync>>
|
||
|
||
// 玩家操作滑片时,情绪波形自动跟随
|
||
// ...
|
||
|
||
// 场景2: 禁用同步,手动控制进度
|
||
<<disable_emotion_wave_slider_sync>>
|
||
<<emotion_wave_to 0.5 2>> // 2秒动画到进度0.5
|
||
|
||
// 场景3: 立即设置进度(跳过动画)
|
||
<<set_emotion_wave 0.75>>
|
||
```
|
||
|
||
## 事件流程
|
||
|
||
```
|
||
SliderController.SlideToNormalized(0.5f)
|
||
↓
|
||
SliderController._currentAngle 更新
|
||
↓
|
||
SliderController.onSliderPositionChanged.Invoke(0.5f)
|
||
↓
|
||
EmotionWaveManager.OnSliderPositionChanged(0.5f)
|
||
↓
|
||
EmotionWaveManager.targetProgress = 0.5f
|
||
↓
|
||
EmotionWaveManager.Update() - smoothstep lerp 追踪
|
||
↓
|
||
EmotionWaveManager.currentProgress 平滑到 0.5f
|
||
↓
|
||
EmotionWaveController.Progress = currentProgress
|
||
↓
|
||
EmotionWaveRenderer 渲染对应阶段的波形
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. **优先级**:当滑片同步启用时,Yarn 命令的 `emotion_wave_to` 和 `set_emotion_wave` 仍然有效,但会与滑片进度产生竞争。建议:
|
||
- 滑片控制时:启用同步
|
||
- Yarn 自动演出时:禁用同步
|
||
|
||
2. **平滑追踪**:无论进度来源(滑片/Yarn),都会经过 smoothstep lerp 平滑处理(lerpSpeed = 4.0)
|
||
|
||
3. **性能**:事件机制确保只在滑片位置实际改变时触发,不会每帧都更新
|
||
|
||
## 调试
|
||
|
||
在 Inspector 的 Debug 区域可以实时查看:
|
||
- `Current Progress`:当前平滑后的进度
|
||
- `Target Progress`:目标进度(来自滑片或 Yarn)
|
||
- `Is Shown`:是否显示状态
|