CyanStars
CyanStars copied to clipboard
[WIP]feat: 新的游戏计时器
目前我们直接使用 AudioSource.time(和 dsp time 同步更新) 来作为音游的更新参考时间,这在 windows 和一般用例的 android 上工作得还算正常,但在 android + bluetooth 时可以观察到总是具有 6-8 帧的停顿
这个 PR 引入了一系列不与 dsp time 强绑定的独立计时器,但还未经过充分测试
引入的 Timer:
- StopWatchTimer : 基于 StopWatch 的计时器,在硬件高精度计时器可用时精度非常高,但上层 API 对它的控制粒度不够细,可能会随着每次暂停逐渐偏移
- RealtimeSliceStartupTimer : 和 StopWatch 类似,但是使用 Unity 提供的 API,这个 API 总是可以方便的获取,理论上不会在暂停时产生偏移 (或不可接受的偏移)
- DspTimer : 使用 dsp time,但是可以使用 delta time 或 realtime 来补偿 dsp time 的长时间停顿,还不清楚在多次暂停后的表现如何
- DefaultMusicGameTime : 综合多个 Timer 的结果取按比例取值,大部分时候只是单纯的取平均值
其他相关更改:
音乐现在不再从 MusicTrack 播放,而是由 MusicGameProcedure 直接安排播放,以精确的控制播放时间
音乐总是延迟 1s 左右播放 ,在 android + bluetooth 上可能受到 dsp time 停顿的影响而延迟 800ms - 900ms,延迟可调
Fixes: 部分修复 #200
Edit: note: 经过实际环境测试,多次暂停产生的偏移几乎不可接受,需要进一步确认问题发生的原因