Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP]feat: 新的游戏计时器 #219

Closed

Conversation

memorydream
Copy link
Collaborator

@memorydream memorydream commented Feb 21, 2024

目前我们直接使用 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: 经过实际环境测试,多次暂停产生的偏移几乎不可接受,需要进一步确认问题发生的原因

Some timer added but not all used, for tests....
@memorydream memorydream marked this pull request as draft February 21, 2024 14:02
@memorydream memorydream force-pushed the feat/MusicGame/music-game-high-resolution-timer branch from 9759265 to 5847dda Compare March 28, 2024 08:55
@Chen-Luan Chen-Luan closed this Aug 19, 2024
@memorydream memorydream deleted the feat/MusicGame/music-game-high-resolution-timer branch October 1, 2024 09:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants