28 lines
1.8 KiB
Markdown
28 lines
1.8 KiB
Markdown
## Why
|
||
|
||
当前 `MovementComponent` 将模拟层(pending inputs 维护、服务器校正、重放)和表现层(视觉插值、bounded correction)耦合在一起。bounded correction 的收敛目标是实时变化的 server position,导致客户端永远在追赶——每次收到服务器状态,收敛目标就变了。表现为本地移动平滑,加上网络同步后抖动。
|
||
|
||
## What Changes
|
||
|
||
- **新增** `LocalPlayerPresentationState` 类型:持有 `_currentPosition/Rotation`(当前显示)和 `_targetPosition/Rotation`(模拟层给的目标)
|
||
- **新增** `LocalPlayerSimulationState` 类型:持有 `_lastAuthoritativePosition/Rotation`、`_pendingInputs`、`_presentationTarget`
|
||
- **重构** `MovementComponent`:`OnAuthoritativeState` 只更新 `_presentationTarget`,不直接修改 rigid.position
|
||
- **重构** 表现层:每帧用 Lerp 将 `_currentPosition` 插值到 `_targetPosition`,再设置 rigid.position
|
||
- **移除** `ControlledPlayerCorrection` 相关逻辑:bounded correction 被表现层 Lerp 替代
|
||
|
||
## Capabilities
|
||
|
||
### New Capabilities
|
||
- `local-player-presentation-state`: 表现层状态(current/target position & rotation)及每帧插值更新
|
||
- `local-player-simulation-state`: 模拟层状态(authoritative baseline、pending inputs、presentation target)
|
||
|
||
### Modified Capabilities
|
||
- `local-player-reconciliation`: 模拟层收到服务器状态后计算 PresentationTarget,表现层负责插值收敛,不再使用 bounded correction
|
||
|
||
## Impact
|
||
|
||
- 新增 `Assets/Scripts/Network/NetworkApplication/LocalPlayerPresentationState.cs`
|
||
- 新增 `Assets/Scripts/Network/NetworkApplication/LocalPlayerSimulationState.cs`
|
||
- 修改 `Assets/Scripts/MovementComponent.cs`
|
||
- 删除 `Assets/Scripts/ControlledPlayerCorrection.cs`(或保留作他用)
|