优化移动平台与乘客的速度继承逻辑,改用双缓冲方案以提升平滑度和兼容性

This commit is contained in:
2026-05-21 18:59:22 +08:00
parent 247a218182
commit c7c8171b8a
3 changed files with 52 additions and 30 deletions

View File

@@ -8,21 +8,26 @@ namespace BaseGames.Core
/// 无需修改 Transform 父子关系,避免与动画/摄像机/HitBox 系统冲突。
///
/// 协议(执行顺序保障):
/// 1. MovingPlatform.FixedUpdate-300计算本帧期望位移 delta → 调用 SetPlatformDelta
/// 2. 实现方 FixedUpdate-200最前端消费 delta_rb.position += delta
/// 3. 乘客离开传感器时 MovingPlatform 调用 OnLeavePlatform继承平台速度防止卡顿
/// 1. MovingPlatform.FixedUpdate-300计算本帧期望位移 delta → 调用 SetPlatformDelta
/// 实现方将其转换为速度delta / fixedDeltaTime存入下帧缓冲区
/// 2. 实现方 FixedUpdate-200将缓冲区速度换入当前帧变量
/// 3. 状态机 FixedUpdate-100通过 Move() 将平台速度叠加到水平速度,
/// 由 velocity 驱动运动,与 RigidbodyInterpolation2D.Interpolate 完全兼容。
/// 4. 乘客离开传感器时 MovingPlatform 调用 OnLeavePlatform继承垂直速度分量
/// 水平分量已通过最后一次 Move() 自然携带,无需重复叠加。
/// </summary>
public interface IPassengerReceiver
{
/// <summary>
/// 由 MovingPlatform 每帧推送本帧平台期望位移量(不依赖 MovePosition 是否已执行)
/// 实现方存入待处理字段,在自己的 FixedUpdate 最前端消费,避免与 velocity 冲突。
/// 由 MovingPlatform 每帧推送本帧平台期望位移量。
/// 实现方将其转换为速度并存入缓冲区,在自己的 FixedUpdate 换入后
/// 经 Move() 叠加到水平速度,保持插值平滑。
/// </summary>
void SetPlatformDelta(Vector2 delta);
/// <summary>
/// 乘客离开平台时调用,传入平台当前帧速度,由实现方叠加到自身速度
/// 防止离台瞬间速度突变产生卡顿
/// 乘客离开平台时调用,传入平台当前帧速度。
/// 实现方仅需继承垂直分量;水平分量已由最后一次 Move() 自然携带
/// </summary>
void OnLeavePlatform(Vector2 platformVelocity);
}