优化移动平台与乘客的速度处理逻辑,改用位移累积方案以提升运动平滑度和代码清晰度

This commit is contained in:
2026-05-21 19:08:18 +08:00
parent c7c8171b8a
commit 39483c4460
2 changed files with 34 additions and 32 deletions

View File

@@ -9,25 +9,28 @@ namespace BaseGames.Core
///
/// 协议(执行顺序保障):
/// 1. MovingPlatform.FixedUpdate-300计算本帧期望位移 delta → 调用 SetPlatformDelta
/// 实现方将其转换为速度delta / fixedDeltaTime存入下帧缓冲区
/// 2. 实现方 FixedUpdate-200将缓冲区速度换入当前帧变量
/// 3. 状态机 FixedUpdate-100通过 Move() 将平台速度叠加到水平速度,
/// 由 velocity 驱动运动,与 RigidbodyInterpolation2D.Interpolate 完全兼容。
/// 4. 乘客离开传感器时 MovingPlatform 调用 OnLeavePlatform继承垂直速度分量
/// 水平分量已通过最后一次 Move() 自然携带,无需重复叠加
/// 实现方将其累积到 _pendingPlatformDelta
/// 2. 实现方 FixedUpdate-200执行 _rb.position += _pendingPlatformDelta 并清零
/// 使用 Rigidbody2D.position而非 transform.positionUnity 保证在 FixedUpdate 中
/// 赋值时会同步更新插值参考点,不引起视觉抖动,与 RigidbodyInterpolation2D.Interpolate 兼容。
/// 3. 状态机 FixedUpdate-100正常调用 Move(speedX)_rb.velocity.x 仅含玩家输入速度,
/// UpdateFacing / ApplyAirDrag 无需减去任何平台速度,语义清晰
/// 4. 乘客离开传感器时 MovingPlatform 调用 OnLeavePlatform继承完整平台速度含水平
/// 保证从移动平台起跳时具有平台动量,手感自然。
/// </summary>
public interface IPassengerReceiver
{
/// <summary>
/// 由 MovingPlatform 每帧推送本帧平台期望位移量。
/// 实现方将其转换为速度并存入缓冲区,在自己的 FixedUpdate 换入后
/// 经 Move() 叠加到水平速度,保持插值平滑
/// 实现方将其累积到内部字段,在自己的 FixedUpdate 中通过 Rigidbody2D.position
/// 直接施加位移,不混入 velocity保持玩家速度语义纯净
/// </summary>
void SetPlatformDelta(Vector2 delta);
/// <summary>
/// 乘客离开平台时调用,传入平台当前帧速度。
/// 实现方仅需继承垂直分量;水平分量已由最后一次 Move() 自然携带。
/// 实现方应将完整平台速度(含水平)叠加到自身 velocity
/// 保证离台瞬间具有平台动量,手感自然。
/// </summary>
void OnLeavePlatform(Vector2 platformVelocity);
}