Skip to content

chu123122/LockStepSystem

Repository files navigation

LockStepSystem - 基于 C++ / C# 的确定性帧同步框架

一个跨语言的帧同步实验项目,包含:

  • C++ 服务端:负责输入收集与广播、超时补全与帧管理。
  • C# Unity 客户端:负责输入采集、逻辑模拟与可视化展示。

项目目标是实现一个可复现、确定性一致的多人游戏逻辑系统,并探索帧同步架构中的关键机制(逻辑时钟、输入同步、确定性物理、渲染插值)。

更详细设计分析见博客:https://blog-b9l.pages.dev/2025/09/06/%E6%8A%80%E6%9C%AF%E8%AE%B0%E5%BD%95/%E5%B8%A7%E5%90%8C%E6%AD%A5%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1%E8%AE%B0%E5%BD%95/

🎮 运行展示

给予一个初始方向的力后,不同客户端在同一帧下运行轨迹完全一致:

帧同步结果

🧩 系统架构

✨ 特性与实现

  • 跨语言通信:使用 Socket 自定义协议,实现 C++ 服务端与 Unity C# 客户端通信。
  • 逻辑时钟系统:通过 Accumulator 与固定时间步(TIME_STEP)实现稳定的逻辑帧更新。
  • 双时钟模型:分离输入帧与逻辑帧,支持后加入客户端的追帧与历史回放。
  • 超时与空指令机制:服务端自动补全迟到或丢失的输入,避免全局死锁。
  • 确定性物理模块:抛弃 Unity Rigidbody,自建简易物理系统(弹性碰撞、摩擦、边界检测)。
  • 逻辑与渲染解耦:采用 SmoothDamp 插值,实现逻辑与表现层分离。

🚧 局限与未来改进

  • 当前版本的确定性仅限同一设备,未实现定点数支持。
  • 网络层缺少延迟模拟。
  • 后续计划引入:
    • 定点数数学库
    • 指令回放与状态回滚
    • 快照插值机制(Snapshot Interpolation)
    • 多客户端压力测试

About

基于 C++ / C# 的确定性帧同步框架

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors