RUDPClient/check_result.md

61 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#### MoveSpeed 对齐 ✅ 已确认无问题
| 环节 | 值 | 说明 |
| --------------------------------------------------------- | ------------ | ----------------------------------------------------------------------- |
| Server ServerAuthoritativeMovementConfiguration.MoveSpeed | 5f默认值 | CreateRuntimeConfiguration() 未设置,使用 null → 默认 5f |
| Server → Client LoginResponse.Speed | 5 | BuildLoginResponse 中 (int)MathF.Round(host.AuthoritativeMoveSpeed) = 5 |
| Client MovementComponent._speed | 5 | Init(true, master, bootstrap.AuthoritativeMoveSpeed, ...) = 5 |
结论MoveSpeed 实际上是对齐的。bootstrap.AuthoritativeMoveSpeed = 5不是 check.md 中担心的默认值 2。
---
#### TurnSpeedDegreesPerSecond ✅ 一致
Server: 180fClient: 180f。
---
#### SimulationInterval / BroadcastInterval ✅ 一致
均为 50ms。
---
#### AcknowledgedMoveTick 设置逻辑 ✅ 正确
Server HandleMoveInputAsync → state.LastAcceptedMoveTick = input.Tick
Server BuildPlayerState → AcknowledgedMoveTick = state.LastAcceptedMoveTick
Client TryApplyAuthoritativeState → pendingInputs.RemoveAll(tick <= AcknowledgedMoveTick)
路径正确。
---
#### Message Delivery Policy ✅ 一致
MoveInput → HighFrequencySync
PlayerState → HighFrequencySync
DefaultMessageDeliveryPolicyResolver 中的策略映射与 check.md 描述完全吻合。
---
#### Server Update Cadence
DedicatedServerApplication.RunMainLoop() 以固定 50ms 为周期调用 UpdateAuthoritativeMovement逻辑上是稳定的。但如果物理机负载高可能产生波动。
---
#### SyncSequenceTracker 的潜在影响
SyncSequenceTracker 对 MoveInput 的过滤逻辑是:
streamKey = "input:{sender}:{playerId}"
sequence = input.Tick
如果客户端 MoveInput(Tick=N) 被丢弃,下一次 AcknowledgedMoveTick 会跳过 N导致客户端的 pending inputs 被多删。这本身是正确的(服务端只认可它接受的 tick但如果频繁丢弃客户端会不断看到跳帧式的 correction。
建议:在客户端日志中过滤关键词 [MessageManager] 丢弃过期同步消息,确认是否有大量丢弃。
---
#### 总结
根据 check.md 列举的所有检查项,服务端实现均已对齐。最可能的抖动根因不在服务端配置层面,而在:
1. SyncSequenceTracker 的丢弃频率 — 可通过日志确认
2. SetServerTick 的自适应发送间隔振荡 — 48ms/52ms 的快速切换可能导致发送节奏不稳定
3. 客户端 ControlledPlayerCorrection 的 hard snap 阈值 — 如果 positionError > SnapPositionThreshold默认 3 * 50ms * speed会触发瞬移