拓冰建站拓冰建站
首页 / 资讯中心 / 正文

【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年发布其源自南梦宫Namco1980年推出的一款街机游戏《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的核心技术点其工作流程可以分为以下几个关键步骤逻辑帧与渲染帧分离逻辑帧游戏逻辑如移动、攻击、碰撞检测更新的固定时间间隔。通常是固定的比如每秒20帧或30帧逻辑帧对应逻辑帧间隔50ms或33.3ms。渲染帧图形引擎实际绘制画面的频率也即是Unity中的Update可以很高60fps、144fps取决于设备性能。帧同步只关注逻辑帧。帧生命周期收集输入在一个逻辑帧周期内客户端收集本地玩家在这一帧内的所有操作按下移动键、释放技能、鼠标点击等。打包提交客户端将这一帧的输入指令打包成一个帧指令包并发送给服务器。等待全局帧客户端必须等待所有玩家在这一逻辑帧的指令都到达本地才能前进到下一逻辑帧。由服务器收集完所有玩家的输入指令后统一广播全局帧。执行帧一旦确认收到了所有玩家在当前帧的指令所有客户端将这些指令作为输入在同一逻辑帧内同步执行游戏逻辑推进游戏状态。渲染根据更新后的游戏状态渲染线程在各个渲染帧绘制画面也即是Unity中的Update。确定性Determinism是基石这是帧同步能够成立的前提。所有客户端的游戏逻辑包括物理引擎、随机数生成器、碰撞检测顺序等必须是完全确定的。这意味着给定完全相同的初始状态和完全相同的输入指令序列包括顺序和时间间隔在任何设备、任何环境下运行都应该得到完全一致的游戏世界状态。4.基于Protobuf的高性能数据交互TankBattle使用Protobuf进行数据交换这是公认的高性能数据交换格式。【Unity】使用ProtobufNet处理数据。三、TankBattle客户端TankBattle的客户端程序基于HTFramework框架实现。注TankBattle客户端源码会附带在本系列源码包中。1.超多关卡共有2147483647个关卡单人模式时可在选择关卡界面手动选择目标关卡联机模式默认从第一关开始。PS其实是因为关卡生成算法使用一个int型作为种子不同的种子随机生成不同的关卡但相同的种子生成的关卡始终是一致的。2.单人模式玩家可进行单人游戏模式单人模式无需帧同步不需要服务器的全局帧驱动使用本地逻辑帧时钟进行游戏状态推进所以不受网络影响【Unity】TankBattle单人模式3.联机模式玩家可进行联机游戏模式联机模式需要帧同步所有玩家由服务器的逻辑帧时钟驱动且由于我们在确定性上做出的努力每个玩家看到的游戏画面始终是一致的【Unity】TankBattle联机模式4.战斗回放玩家可进行战斗回放所有由玩家本身参与过的关卡无论单人模式还是联机模式本地都会保存为战斗回放可随时浏览回放回放中可加速【Unity】TankBattle战斗回放战斗回放是录屏吗当然不是还记得上文中的这句话吗给定完全相同的初始状态和完全相同的输入指令序列包括顺序和时间间隔在任何设备、任何环境下运行都应该得到完全一致的游戏世界状态战斗回放便是基于此实现的。本系列后续的章节将循序渐进展开对各个内容以及技术要点的详解欢迎关注。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门