news 2026/9/8 19:18:04

【Unity】网络游戏实战(序章)TankBattle联机坦克大战(帧同步)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Unity】网络游戏实战(序章)TankBattle联机坦克大战(帧同步)

更新日期:2026年8月4日。
项目源码:获取源码。

免责声明:本系列所使用的图片、音频、模型等所有素材均有可能来自互联网,本专栏所有文章仅做学习和教程目的,不会将任何素材用于任何商业用途。

索引

  • 【系列简介】
  • 【帧同步】
  • 【内容简介】
    • 一、uNet网络游戏服务端框架
    • 二、TankBattle服务端
      • 1.心跳机制
      • 2.大厅功能
      • 3.帧同步
      • 4.基于Protobuf的高性能数据交互
    • 三、TankBattle客户端
      • 1.超多关卡
      • 2.单人模式
      • 3.联机模式
      • 4.战斗回放

【系列简介】

本系列会复刻FC经典游戏《坦克大战》(Battle City),并以帧同步技术实现多人联机模式,且具备双端互联(PC端和安卓移动端),战斗回放等功能。

FC上的《坦克大战》(Battle City)于1985年发布,其源自南梦宫(Namco)1980年推出的一款街机游戏《Tank Battalion》,FC版在玩法、画面和关卡上都做了很多经典改良,其远不止是一款射击游戏,它集合了简单的上手体验、有深度的策略、丰富的隐藏要素和双人合作的乐趣,成为了一代人的童年回忆。

在Unity中还原它略有一些挑战性(要做到1:1还原,操作手感、画面、音效等),当然,我们的核心功能是使用帧同步技术将其网络化,帧同步技术作为高性能实时对战游戏最精妙的架构之一,本系列将带你摘下这颗镶嵌在网络游戏开发领域皇冠上的明珠。

【帧同步】

在网络游戏开发中,帧同步(Lockstep,或更准确地说是帧锁定同步)是一种常见的同步策略,尤其在即时战略(RTS,如《星际争霸》《帝国时代》)、格斗游戏(如《街霸》系列)以及部分MOBA(如《王者荣耀》)中广泛应用。

简单来说,帧同步的核心思想是:客户端之间不直接同步每个单位的具体状态(位置、血量等),而是只同步玩家的输入指令(操作),所有客户端在相同的逻辑帧上执行完全相同的指令序列,从而自行计算出完全一致的游戏世界状态。

【内容简介】

本系列将涵盖如下内容或技术要点:

一、uNet网络游戏服务端框架

uNet为本人使用.Net Core开发的高性能、高并发网络游戏服务端框架,可适用于多人在线类游戏匹配对战类游戏,支持心跳机制状态同步基于Protobuf的高性能数据交互等(在状态同步的基础上改进便支持帧同步)。

没错,本系列与上一系列(【Unity网络游戏实战】MMORPG + 中国象棋联网对战)使用同样的服务端框架,所以很多东西是相同的,本系列可能会稍作精简。

注:uNet源码会附带在本系列源码包中。

二、TankBattle服务端

TankBattle的服务端程序基于uNet框架实现,支持身份认证、心跳机制、大厅功能、匹配功能、帧同步、基于Protobuf的高性能数据交互等。

注:TankBattle服务端源码会附带在本系列源码包中。

1.心跳机制

当有任意客户端连入服务端以后,服务端会每隔指定时间向其发送心跳包,如果心跳包超时未送达,或客户端未在指定时间内响应心跳包,则判定为心跳超时,会主动将该客户端踢出服务器。

2.大厅功能

大厅用于容纳所有登入服务器(但未进行匹配游戏)的玩家,在大厅中的玩家进行匹配时,可使用自定义匹配算法为其匹配队友,匹配成功后正式进入游戏关卡。

3.帧同步

帧同步是TankBattle的核心技术点,其工作流程可以分为以下几个关键步骤:

  1. 逻辑帧与渲染帧分离
  • 逻辑帧:游戏逻辑(如移动、攻击、碰撞检测)更新的固定时间间隔。通常是固定的,比如每秒20帧或30帧逻辑帧(对应逻辑帧间隔50ms或33.3ms)。
  • 渲染帧:图形引擎实际绘制画面的频率(也即是Unity中的Update),可以很高(60fps、144fps),取决于设备性能。
  • 帧同步只关注逻辑帧。
  1. 帧生命周期
  • 收集输入:在一个逻辑帧周期内,客户端收集本地玩家在这一帧内的所有操作(按下移动键、释放技能、鼠标点击等)。
  • 打包提交:客户端将这一帧的输入指令打包成一个帧指令包,并发送给服务器。
  • 等待全局帧:客户端必须等待所有玩家在这一逻辑帧的指令都到达本地,才能前进到下一逻辑帧。(由服务器收集完所有玩家的输入指令后,统一广播全局帧)。
  • 执行帧:一旦确认收到了所有玩家在当前帧的指令,所有客户端将这些指令作为输入,在同一逻辑帧内同步执行游戏逻辑,推进游戏状态。
  • 渲染:根据更新后的游戏状态,渲染线程在各个渲染帧绘制画面(也即是Unity中的Update)。
  1. 确定性(Determinism)是基石
  • 这是帧同步能够成立的前提。所有客户端的游戏逻辑(包括物理引擎、随机数生成器、碰撞检测顺序等)必须是完全确定的。
  • 这意味着:给定完全相同的初始状态和完全相同的输入指令序列(包括顺序和时间间隔),在任何设备、任何环境下运行,都应该得到完全一致的游戏世界状态。

4.基于Protobuf的高性能数据交互

TankBattle使用Protobuf进行数据交换,这是公认的高性能数据交换格式。

【Unity】使用ProtobufNet处理数据。

三、TankBattle客户端

TankBattle的客户端程序基于HTFramework框架实现。

注:TankBattle客户端源码会附带在本系列源码包中。

1.超多关卡

共有2147483647个关卡,单人模式时可在选择关卡界面手动选择目标关卡,联机模式默认从第一关开始。

PS:其实是因为关卡生成算法使用一个int型作为种子,不同的种子随机生成不同的关卡,但相同的种子生成的关卡始终是一致的。

2.单人模式

玩家可进行单人游戏模式,单人模式无需帧同步,不需要服务器的全局帧驱动,使用本地逻辑帧时钟进行游戏状态推进,所以不受网络影响:

【Unity】TankBattle单人模式

3.联机模式

玩家可进行联机游戏模式,联机模式需要帧同步,所有玩家由服务器的逻辑帧时钟驱动,且由于我们在确定性上做出的努力,每个玩家看到的游戏画面始终是一致的:

【Unity】TankBattle联机模式

4.战斗回放

玩家可进行战斗回放,所有由玩家本身参与过的关卡(无论单人模式还是联机模式),本地都会保存为战斗回放,可随时浏览回放(回放中可加速):

【Unity】TankBattle战斗回放

战斗回放是录屏吗?当然不是!还记得上文中的这句话吗:

给定完全相同的初始状态和完全相同的输入指令序列(包括顺序和时间间隔),在任何设备、任何环境下运行,都应该得到完全一致的游戏世界状态

战斗回放便是基于此实现的。

本系列后续的章节将循序渐进展开对各个内容以及技术要点的详解,欢迎关注。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/8 19:16:42

【Unity】TankBattle联机坦克大战(一)帧同步的基石“确定性”

更新日期:2026年8月6日。 项目源码:获取源码。 索引帧同步的确定性一、数学库1.FixFloat2.FixFloat基础运算3.FixFloat重载运算符二、随机数三、容器四、逻辑与渲染分离LogicFrameBehaviour五、时间管理六、物理七、乐观策略帧同步的确定性 本篇我们直接…

作者头像 李华
网站建设 2026/9/8 19:14:12

Ponytail:单日1364星,一个让Agent少写代码的技能包

1. 单日 1,364 星,Ponytail 为什么值得关注1.1 Agent 写代码的尴尬现状先说一个我最近越来越强烈的感受。过去大半年我一直在折腾各类 Agent 编程工具,从最开始的简单问答,到后来让 Agent 直接改仓库代码、跑测试、修 bug,一步步走…

作者头像 李华
网站建设 2026/9/8 19:13:26

激光雷达为何越用越不准?老化机制与健康评估全解析

1. 精度下降到底指什么:先分清“测不准”和“测不稳”先说结论:激光雷达用久了,精度确实会下降,但大部分情况下不是你想象中那种“测距从2cm漂到20cm”的断崖式衰退,而是以更隐蔽的方式出现——点云变稀、边角出现噪点…

作者头像 李华
网站建设 2026/9/8 19:12:31

电源完整性设计入门:PDN阻抗与去耦电容实战指南

先说个上周刚处理完的事。同事拿来一块FPGA板,说系统上电后偶尔复位,查了半天时钟和复位电路都正常,示波器挂在核心电源轨上一看就露馅了——1.0V的核心电压在负载切换瞬间掉到了0.82V,持续了几十微秒,刚好低于监控芯片…

作者头像 李华
网站建设 2026/9/8 19:12:27

关于雷达技术的书籍

下载链接:https://ftp.idu.ac.id/wp-content/uploads/ebook/tdg/MILITARY%20PLATFORM%20DESIGN/INTRODUCATION%20TO%20RADAR%20SYSTEM%20BY%20MERRIL,%20I%20SKLOINK%20(4).pdf https://soaneemrana.org/onewebmedia/INTRODUCATION%20TO%20RADAR%20SYSTEM%20BY%20ME…

作者头像 李华
网站建设 2026/9/8 19:11:29

AI研发流程再造:从代码管理到全链路可审计的工程化实践

1. 传统研发流程在AI项目上集体失灵,问题到底出在哪1.1 代码仓库管得住代码,却管不住“实验现场”去年我们团队上线了一个客服场景的大模型应用,头一个月一切正常。到了第三个月,业务方突然拿着几段对话截图找我,语气很…

作者头像 李华