11# 04-回放系统
22
3- > 回放系统负责把“已经发生过的战斗/模拟过程”稳定地记录下来,并在后续以可控速度、可寻址方式重新播放。AbilityKit 里它不是单一实现,而是由通用记录容器、事件轨道、回放控制器、锁步文件格式以及 Demo 侧的回放录制/播放器共同组成。
3+ > 回放系统负责把“已经发生过的战斗/模拟过程”稳定地记录下来,并在后续以可控速度、可寻址方式重新播放。AbilityKit 里它不是单一实现,而是由通用记录容器、事件轨道、回放控制器、按帧记录文件格式以及 Demo 侧的回放录制/播放器共同组成。
44
55## 1. 能力定位
66
2828| 会话封装 | 统一管理容器、序列化器与轨道工厂 | [ ` RecordSession ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/Core/Session/RecordSession.cs:5 ) 、[ ` IRecordSession ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/Core/Session/IRecordSession.cs:5 ) |
2929| 回放控制 | 以固定步长推进事件消费 | [ ` BasicReplayController ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/Core/Replay/BasicReplayController.cs:6 ) 、[ ` IReplayClock ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/Core/Replay/IReplayClock.cs:5 ) |
3030| 事件分发 | 将通用事件解码为 typed 回调 | [ ` TypedReplayEventHandler ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/Adapters/Replay/TypedReplayEventHandler.cs:9 ) |
31- | 锁步录制 /回放 | 把输入、状态哈希、快照写入锁步文件并反向读取 | [ ` LockstepFrameRecordSink ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/Lockstep/LockstepFrameRecordSink .cs:7 ) 、[ ` LockstepInputRecordReplaySource ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/Lockstep/LockstepInputRecordReplaySource .cs:10 ) |
31+ | 按帧录制 /回放 | 把输入、状态哈希、快照写入按帧记录文件并反向读取 | [ ` FrameRecordSink ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/FrameRecord/FrameRecordSink .cs:7 ) 、[ ` FrameRecordReplaySource ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/FrameRecord/FrameRecordReplaySource .cs:10 ) |
3232| Demo 回放 | 为 MOBA 提供独立的二进制回放文件录制与播放 | [ ` ReplayRecorder ` ] ( ../../../Unity/Packages/com.abilitykit.demo.moba.share/Runtime/Game/Flow/Battle/Replay/ReplayRecorder.cs:11 ) 、[ ` ReplayPlayer ` ] ( ../../../Unity/Packages/com.abilitykit.demo.moba.share/Runtime/Game/Flow/Battle/Replay/ReplayPlayer.cs:11 ) |
3333
3434---
@@ -186,11 +186,11 @@ sequenceDiagram
186186
187187---
188188
189- ## 6. 锁步录制与回放源
189+ ## 6. 按帧录制与回放源
190190
191191### 6.1 录制出口
192192
193- [ ` LockstepFrameRecordSink ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/Lockstep/LockstepFrameRecordSink .cs:7 ) 负责把运行中的锁步数据写入底层 writer:
193+ [ ` FrameRecordSink ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/FrameRecord/FrameRecordSink .cs:7 ) 负责把运行中的按帧数据写入底层 writer:
194194
195195- ` AppendInput ` :记录输入。
196196- ` AppendStateHash ` :记录状态哈希。
@@ -200,9 +200,9 @@ sequenceDiagram
200200
201201### 6.2 文件/源结构
202202
203- [ ` LockstepInputRecordFile ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/Lockstep/LockstepInputRecordFile .cs ) 定义了锁步回放文件的元数据 、输入帧、状态哈希帧、快照帧和索引块。
203+ [ ` FrameRecordFile ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/FrameRecord/FrameRecordFile .cs ) 定义了按帧回放文件的元数据 、输入帧、状态哈希帧、快照帧和索引块。
204204
205- [ ` LockstepInputRecordReplaySource ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/Lockstep/LockstepInputRecordReplaySource .cs:10 ) 则把该文件反向整理为按帧查询的数据源:
205+ [ ` FrameRecordReplaySource ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/FrameRecord/FrameRecordReplaySource .cs:10 ) 则把该文件反向整理为按帧查询的数据源:
206206
207207- ` TryGetInputs(FrameIndex frame, out IReadOnlyList<PlayerInputCommand> inputs) `
208208- ` TryGetSnapshots(FrameIndex frame, out IReadOnlyList<WorldStateSnapshot> snapshots) `
@@ -213,8 +213,8 @@ sequenceDiagram
213213
214214``` mermaid
215215flowchart TB
216- Writer[LockstepFrameRecordSink ] --> File[LockstepInputRecordFile ]
217- File --> ReplaySource[LockstepInputRecordReplaySource ]
216+ Writer[FrameRecordSink ] --> File[FrameRecordFile ]
217+ File --> ReplaySource[FrameRecordReplaySource ]
218218 ReplaySource --> Inputs[输入查询]
219219 ReplaySource --> Snapshots[快照查询]
220220 ReplaySource --> Hashes[哈希查询]
@@ -270,7 +270,7 @@ MOBA Demo 还实现了一套独立的二进制回放格式,用于战斗回放
270270``` mermaid
271271sequenceDiagram
272272 participant Runtime as 战斗运行时
273- participant Sink as LockstepFrameRecordSink
273+ participant Sink as FrameRecordSink
274274 participant Writer as 底层写入器
275275 participant Session as RecordSession
276276
@@ -312,10 +312,10 @@ sequenceDiagram
312312- [ ` BasicReplayController ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/Core/Replay/BasicReplayController.cs:6 )
313313- [ ` TypedReplayEventHandler ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/Adapters/Replay/TypedReplayEventHandler.cs:9 )
314314
315- ### 锁步与文件回放
315+ ### 按帧记录与文件回放
316316
317- - [ ` LockstepFrameRecordSink ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/Lockstep/LockstepFrameRecordSink .cs:7 )
318- - [ ` LockstepInputRecordReplaySource ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/Lockstep/LockstepInputRecordReplaySource .cs:10 )
317+ - [ ` FrameRecordSink ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/FrameRecord/FrameRecordSink .cs:7 )
318+ - [ ` FrameRecordReplaySource ` ] ( ../../../Unity/Packages/com.abilitykit.record/Runtime/Record/FrameRecord/FrameRecordReplaySource .cs:10 )
319319
320320### Demo 二进制回放
321321
@@ -329,6 +329,6 @@ sequenceDiagram
329329回放系统在 AbilityKit 里有两个层次:
330330
331331- ** 通用层** :以 ` RecordContainer ` 、` RecordSession ` 、` BasicReplayController ` 为核心,适合抽象化记录与回放。
332- - ** 业务层** :以锁步文件与 Demo 二进制回放为核心,适合战斗调试、问题复现和产品功能落地。
332+ - ** 业务层** :以按帧记录文件与 Demo 二进制回放为核心,适合战斗调试、问题复现和产品功能落地。
333333
334334两者共享“按帧组织历史数据”的思想,但在文件结构、序列化方式和调用者角色上各自独立。
0 commit comments