游戏开发 帧同步

news2025/1/21 0:54:50

帧同步技术是一个古老的技术,没有特别固定的招式,优化方向也是根据实际情况各有不同,但是其核心思想都是一样的。

1.为什么需要帧同步技术

帧同步主要是为了保证某些类型的游戏在同步时,可以保证很好的游戏体验。游戏类型通常包括,竞技类游戏,如MOBA、射击类、格斗类,这类游戏的特点是要求精确的打击伤害判定和及时的反馈。

2.帧同步的特点

战斗逻辑在本地计算。

网络只转发玩家的操作信息(移动、攻击等指令),不同步玩家的状态信息(位置、旋转、血量等状态)。

因为逻辑在本地计算,所以必须保证所有客户端可以计算出一致的结果。

帧同步中的帧指的是逻辑帧,要求更新频率固定,66ms是一个比较理想的更新频率,unity中的Update是渲染更新,更新频率不稳定,所以不能用。

3.状态同步与帧同步

说到帧同步,不得不提状态同步, 这两种技术最大的区别就是战斗逻辑写在什么地方。

状态同步简单来说就是有一个权威服务器运行着一个没有图形界面的客户端,然后服务器收集所有人的操作数据,计算后再把所有人的关键数据广播给所有人,玩家的客户端只是服务器的一个展示。

帧同步中的每一个客户端都是要计算所有数据,服务器只需要转发彼此的操作即可。

其实帧同步和状态同步在很多时候是一个互补的存在,现在这个时代,很多商业游戏也都是两种技术同时运用在一个游戏里,取长补度。

4.帧同步的优势与劣势

开发效率:因为战斗逻辑都写在客户端,服务端只负责转发操作消息,双端开发的时候不需要做额外的对接工作,所以帧同步开发效率高。

流量消耗:状态同步需要转发状态信息,会包含很多信息,而帧同步只转发操作信息,所以流量消耗小。

细节反馈:帧同步的核心优势就在这里。

网络波动:帧同步因为追求细节操作的反馈,所以当网络波动高的时候,会受很大影响,但是我们也会有很多优化方案,之后会细说。

安全性:因为状态同步里,核心战斗逻辑都在服务端计算验证,所以相对安全。虽说帧同步反外挂较差,但是同样也有很多解决方案,之后细说。

战斗回放:因为帧同步的服务端会记录每一帧的数据,所以做回放的时候,只要把每帧的操作信息都执行一遍就可以了,比较好做。

断线重连:做起来就比较复杂,需要结合状态同步的技术方案。

<

这里提一下

状态同步,对网络的要求并不是很高,所以我们可以使用TCP网络协议,用TCP网络协议的优点的话就是,安全性好,能保证数据传达顺序。如果是掉线,就是直接断开连接。

但是TCP网络也有坏处,就是传输慢,数据量大,这也导致了TCP 网络传输效率没有UDP高。

用在状态同步刚刚好,状态同步游戏玩法逻辑都在服务器执行,客户端只做播放。

这也是逻辑和渲染分离。但是,状态同步的话,客户端也是有一部分的逻辑处理,比如我们的怪物,在大唐中就是怪物的一部分逻辑在服务器,另一部分咋客户端,这样做的好处是,俩种逻辑,得到的效果是一样的。

就比如帧同步的相同的时间 +相同的逻辑 = 相同的输出,这样也保证了逻辑的正确性。

还有一个缺点就是状态同步逻辑都在服务器处理,所以对服务器的压力也是蛮大的。但是有安全性,外挂什么的几乎不可能破解服务器。这样保证了客户的数据财产安全,同时也保证了游戏的公平性。

状态同步,在客户端玩家进行输入后,发到服务器,服务器进行逻辑处理后,下发到客户端,客户端进行播放。

在人物位置同步的话就是,玩家进行输入,控制玩家移动,然后告诉服务器,移动的位置信息,大唐的项目就是这样做的。

服务器进行逻辑处理后,下发到可以看见该客户端的客户端进行位置更新。实现状态同步。状态同步断线。是在每隔一段时间发送

心跳包,如果心跳包,在多次为接收到请求的话,请求向服务器重新连接。服务器同时也会保存在掉线最后的状态、重新连接后,下发

客户端,更新状态。

>

5.大致的解决方案

核心其实就是保证所有客户端的表现一致性。

其中影响一致性的因素有如下:

不同的运行平台中浮点数的精度不同。

Unity中的物理引擎用到了浮点数,所以物理相关的东西需要自己写(比如碰撞检测)。

不同客户端性能不一样,开始时机就会不同,所以还需要让同一局比赛,大家都在同一时刻开始运算逻辑。

需要同步随机数种子,让每个客户端随机的结果保持一致

除了保证一致性,还需要一些常用的技术方案:

1、网络协议使用udp

2、协议数据使用protobuf

3、录像回放

4、断线重连

5、对抗网络抖动的策略

6、逻辑与表现分离

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/161242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无线wifi的参数即含义

WiFi属性信息 参考&#xff1a;WiFi发展史&#xff1a;https://zhuanlan.zhihu.com/p/74348591&#xff0c;WiFi2.4和5G简述&#xff1a;https://zhuanlan.zhihu.com/p/344652613 下面图中的WiFi4和WiFi5是根据协议的另一个名字。&#xff08;图片来自参考链接&#xff09; …

vue3 antd项目实战——Modal弹窗自定义遮罩 (利用maskStyle属性自定义遮罩样式)

vue3 antd项目实战——Modal弹窗自定义遮罩 maskStyle知识回调场景复现关于mask遮罩的API属性利用maskStyle属性自定义遮罩样式知识回调 文章内容文章链接vue3 antd ts实战——ant-design-vue组件库引入https://blog.csdn.net/XSL_HR/article/details/127396384?spm1001.2014…

随手查——Multisim

关于电路仿真软件Multisim的一些记录&#xff0c;基于Multisim14.0。 Multisim1、Multisim中元器件的颜色2、快速创建一个放大器电路3、如何进行参数扫描&#x1f680;参数扫描数据点导出为Excel&#x1f680;退出参数扫描模式4、交流分析1、Multisim中元器件的颜色 Multisim中…

YOLOV8 | 最先进的 YOLO 模型训练自己的数据集(持续更新中)

本文实现了俩种环境的设置&#xff0c;一种是windows的CPU版本&#xff0c;还有服务器上的GPU版本。CPU版本仅用来实现检测&#xff0c;而GPU版本用来训练自己的数据集&#xff01;&#xff08;选择其中一个环境运行后&#xff0c;训练自己的数据集&#xff09;1.环境1&#xf…

C#,图像二值化(22)——局部阈值的伯恩森算法(Bernsen Thresholding)及源程序

1、局部阈值的伯恩森算法&#xff08;Bernsen Thresholding&#xff09;Bernsen方法是为图像分割开发的局部自适应二值化方法之一。在这项研究中&#xff0c;实现了Bernsen的局部自适应二值化方法&#xff0c;并对不同灰度图像进行了测试。Bernsen’s method is one of locally…

04_FreeRTOS任务挂起和恢复函数

目录 任务的挂起与恢复的API函数 任务挂起函数介绍 任务恢复函数介绍 中断中恢复函数 vTaskSuspend()任务挂起函数 vTaskResume()任务中恢复函数 xTaskResumeFromISR()中断中恢复函数 任务的挂起与恢复的API函数 挂起:挂起任务类似暂停,可恢复;删除任务,无法恢复,类似“…

公务员行测常识积累(持续更新中)

公务员行测常识积累政治天文地理人文戏曲历史经济物理生物医学政治 区域协调发展战略&#xff1a;以城市群为主体构建大中小城市和小城镇协调发展的城镇格局&#xff1b;以疏解北京非首都功能为“牛鼻子”推动京津冀协同发展&#xff1b;以共抓大保护、不搞大开发为导向推动长…

个人建议【建议】

以下只是个人的一些看法 本文已在CSDN博客中发布文章 本文已在CSDN建议社区中发布帖子 重点内容已经被蓝色字体标志出来了&#xff0c;希望能对建设优秀的CSDN有所启发 快速浏览看总结 中心思想看最后 1.我的专栏上限问题还没解决 在2022-10-24 20:33:41就发出了这个问题&…

如何突破以往模式的束缚,如何让互联网行业重新开启新的想象空间

在流量和资本的红利已然被出清的大背景下&#xff0c;以平台经济为代表的互联网经济的发展同样被逼退到了进退维谷的境地里。如何突破以往发展模式的束缚&#xff0c;如何让互联网行业的发展重新开启新的想象空间&#xff0c;成为每一个互联网玩家必然需要思考的重要课题。于是…

Java基础学习笔记(十五)—— Sream流

Sream流1 Stream流初体验2 Stream流概述3 生成Stream流4 中间操作方法5 终结操作方法6 收集操作方法7 Stream流案例1 Stream流初体验 案例需求 创建一个集合&#xff0c;存储多个字符串元素把集合中所有以“张”开头的元素存储到一个新的集合把"张"开头的集合中的长…

SpringCloud高级应用-2(Gateway-01)

Gateway介绍&#xff1a; Spring Cloud Gateway 是Spring Cloud团队的一个全新项目&#xff0c;基于Spring 5.0、SpringBoot2.0、Project Reactor 等技术开发的网关。旨在为微服务架构提供一种简单有效统一的API路由管理方式。 Spring Cloud Gateway 作为SpringCloud生态系统…

Acwing---1214.波动数列

波动数列1.题目2.基本思想3.代码实现1.题目 观察这个数列&#xff1a; 1 3 0 2 -1 1 -2 … 这个数列中后一项总是比前一项增加2或者减少3&#xff0c;且每一项都为整数。 栋栋对这种数列很好奇&#xff0c;他想知道长度为 n 和为 s 而且后一项总是比前一项增加 a 或者减少 …

Grafana配置sqlserver,展示数据

Grafana配置sqlserver&#xff0c;展示数据1. 连接数据源2. Visualization2.1 时间表达式2.2 Graph2.2.1 Example with metric column2.2.2 convert null values to be zero instead2.2.3 Using multiple columns3. AwakeningGrafana Document: https://grafana.com/docs/grafa…

java MultipartFile+vue+element 批量上传文件、图片,与普通数据同时提交保存才上传到后端

一.背景 文件上传项目可参考&#xff1a;点击预览 1.最简单也是最普遍的做法是form表单提交&#xff0c;其实前端提交到后端也是难以离开form表单提交&#xff0c; 一般有两种方式来处理文件、图片上传&#xff1a; 先上传&#xff0c;获取返回路径&#xff0c;再整个表单提…

PyTorch实现基本的线性回归

线性回归理论知识参考文章&#xff1a;线性回归 下面我们将从零开始实现整个线性回归方法&#xff0c; 包括数据集生成、模型、损失函数和小批量随机梯度下降优化器。 1.导入 %matplotlib inline import random import torch from d2l import torch as d2l2.生成数据集 我们…

js垃圾回收(引用计数算法、标记清除算法、v8垃圾回收机制、浏览器性能监控、任务管理器、内存分析、JSBench)

目录 垃圾 可达对象 GC算法&#xff08;垃圾回收机制&#xff09; 引用计数算法 优点 缺点 标记清除算法 优点 缺点 标记整理算法 优点 缺点 V8 V8垃圾回收 新生代对象回收 晋升条件 老生代对象回收 性能监控Performance 浏览器任务管理器 内存分析 ​编…

Apache Doris 系列: 基础篇-BitMap索引

1. 测试数据准备 本文使用SSB&#xff08;Star-Schema-Benchmark&#xff09;的测试数据&#xff0c;读者也可以自行准备测试数据 1.1 编译ssb-dbgen 数据生成工具 ## 拉取Apache Doris源代码 git clone https://github.com/apache/doris.git## 编译ssb-dbgen cd doris/tool…

计算机网络复习之应用层

统一资源定位系统&#xff08;uniform resource locator;URL&#xff09;是因特网的万维网服务程序上用于指定信息位置的表示方法。它最初是由蒂姆伯纳斯李发明用来作为万维网的地址。现在它已经被万维网联盟编制为互联网标准RFC1738。邮局协议&#xff08;Post Office Protoco…

TDemo 备注文本的二种存贮方式

TDemo 备注纯文本的二种存贮方式 数据库使用过程中&#xff0c;对于TDeme控件&#xff0c;对应数据库的分为nvarchar(n)类型字段。 一、通常使用二种格式的文本&#xff1a; &#xff08;1&#xff09;单纯文本 &#xff08;2&#xff09;带换行符的文本 这二种格式&#xff0c…

Pdf 转换成Word如何在线转换?职场公认好用软件推荐

Pdf 转换成Word如何在线转换&#xff1f;生活中很多时候我们需要接触大量的办公文件&#xff0c;特别是利用office的三种常见的文件格式编辑各类文件&#xff0c;最常见的便是Word文件操作。为了更方便我们进行文件传输&#xff0c;大部分情况下我们会把格式排版完好的Word文档…