[游戏开发]网络同步方式

2023-10-26

状态同步

优点:

  1. 数据在服务器运算,客户端接收到的数据一定准确
  2. 防止数据作弊,角色数据在服务器,客户端只上传操作,想作弊没门
  3. 网络波动不敏感
  4. 多端表现可以不一致,重视数值准确。

缺点:

  1. 前后端数据包体大,
  2. 服务器压力比较重(计算量、传输量)

研发特点:战斗逻辑全部在服务器,客户端等着服务器数据刷表现。

适合使用状态同步的游戏类型:魔兽世界、传奇等MMORPG游戏

帧同步

 优点:

  1. 只转发用户操作,网络带宽压力小
  2. 适合回放、直播(省流量)

缺点:

  1. 网络波动及其敏感
  2. 由于只同步用户操作,多端要保证根据相同的输入获得相同的输出
  3. 随机数确保一致
  4. 浮点数精度不同
  5. 物理引擎不可靠
  6. 需要特殊处理数据作弊

研发特点: 服务器只负责转发用户操作,可以外加操作校验防作弊,主要的战斗逻辑代码都在客户端。

总结:

通过上述分析,

帧同步的分支:

我个人认为帧同步主要分为三个研发方向:第一种FPS类游戏例如:CS/CF/守望先锋,第二种是MOBA类如王者荣耀,另三种是卡牌类(阴阳师),主要区别我列个表格

网络方式 物理引擎 随机数 行为预测 快照与回滚 数据表现分离 定点数 表现裁剪
FPS UDP或TCP 自己写物理 不经常 需要 需要 需要 需要 需要
MOBA UDP或TCP 自己写物理 经常用 需要 需要 需要 需要 需要
卡牌类 TCP 不需要物理 经常用 不需要 不需要 需要 需要 不允许

为何同样是帧同步缺差异如此之大,主要还是因为游戏类型不同、设计需求不同导致的,FPS和MOBA的设计方案几乎一模一样,但有一个细节的地方处理不同就是快照与回滚。

下面是 

UDP为什么比TCP快

  1. TCP为了可靠性保证,增加了3次握手4次挥手,复杂的拥塞控制,以及流量控制,让网络传输的延迟进一步增加。
  2. 采用TCP基于滑动窗口,一旦发生丢包,TCP会将后续的包缓存起来,等前面的包重传并接收到后再继续发送,延时会越来越大,基于UDP对实时性要求较为严格的情况下,采用自定义重传机制,有包就发,能够把丢包产生的延迟降到最低,尽量减少网络延迟。
  3. UDP报头8字节,TCP报头20字节以上,
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[游戏开发]网络同步方式 的相关文章

  • Unity3d Terrain地形制作系列(一)

    游戏简单地形 地形制作 地形制作 第一步在场景里加载一个地形对象 第二步 我们在属性面板里找到绘制地形 然后选择Set Height 绘制高度 应该我们要制作低凹的效果 所有先让他有个高度 不然是不能实现低凹的效果 如图 我们然后选择绘制地
  • 1.17 从0开始学习Unity游戏开发--场景切换

    前面的所有文章我们都在一个固定的游戏场景内进行开发 在最开始介绍场景这个概念的时候就已经提及 这个场景可以是一张地图 或者是一个对战房间等等 所以显然这个场景可以有多个 并且可以从一个场景切换到另外一个场景 那么在Unity中如何进行场景切
  • Unity-AR 简介

    Unity AR 简介 现有Unity AR Sdk ARKit 苹果推出的AR开发平台 ARCore Google 推出的增强现实 SDK ARFoundation ARFoundation是ARKit XR插件和ARCore XR插件
  • Unity中按钮检测鼠标状态

    改方法主要是用于按钮检测鼠标的进入 滑出 点击 抬起 长按 长按停止 1 先将下面这个脚本挂载到需要检测鼠标状态的按钮上 using System Collections using System Collections Generic u
  • Unity中实现倒计时的几种方式

    1 Time time using UnityEngine public class TimeTest MonoBehaviour public float secound 10 void Update Timing private flo
  • Unity中UI框架的使用1-添加面板、显示Loading页面

    其中BasePanel和Canvas都是挂在面板的预制物上的 1 导入我们的UI框架 本篇文章中有用的是两个UIPanelType NUIManager和NBasePanel 会放在文章最后供大家使用 2 先将我们做好的Panel设置成预制
  • Unity学习笔记(一)—— 基础知识

    一 基础知识 1 开发团队组成 2 unity特点 图形界面 所见即所得 入门简单 支持C 比OC C 更友好 js 国内外资源丰富 因为使用的人多 跨平台性好 PC端 移动端等 对VR AR的支持最完善 3 成功案例 游戏 炉石传说 神庙
  • unity工程崩溃资源找回

    1 Unity死机未保存场景 当你在Unity中编辑场景 突然死机时 可以在项目文件目录中找到Temp文件夹 双击文件夹 找到 Backupscenes文件夹 把后缀为 backup的文件后缀改为 unity 然后拖进Unity的Proje
  • 【Unity】按Esc进入操作菜单

    本文章是基于如下视频的自我总结 https www youtube com watch v JivuXdrIHK0 步骤如下 1 在Canvas 界面添加一个Panel Panel中添加一个按钮 调整按钮的大小为合适大小 调整字体的大小为合
  • Unity保存图片到相册

    Unity保存图片到Android相册 Java 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
  • unity 性能查看工具Profiler

    文章目录 前言 profiler工具介绍 菜单栏 帧视图 模块视图 模块详细信息 通过profiler分析优化游戏性能 最后 前言 每次进行游戏优化的时候都用这个工具查看内存泄漏啊 代码优化啊之类的东西 真的好用 但是之前也就是自己摸索一下
  • 【原神游戏开发日志1】缘起

    原神游戏开发日志1 缘起 版权声明 本文为 优梦创客 原创文章 您可以自由转载 但必须加入完整的版权声明 文章内容不得删减 修改 演绎 相关学习资源见文末 大家好 最近看到原神在TGA上频频获奖 作为一个14年经验的游戏开发行业的老兵 我就
  • unity小球跟随音乐节奏放大缩小和改变颜色

    放在小球身上 设置对应组件即可 using System Collections using System Collections Generic using Unity VisualScripting using UnityEngine
  • 微信游戏如何开发

    中懿游游戏软件开发 微信游戏开发通常涉及使用微信小游戏平台进行开发 微信小游戏是一种在微信平台上运行的轻量级游戏 用户可以在微信中直接体验 无需下载安装 以下是在微信平台上开发小游戏的一般步骤 1 注册微信开发者账号 访问 微信开放平台 注
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • U3D游戏开发中摇杆的制作(NGUI版)

    在PC端模拟摇杆 实现控制摇杆让玩家或者物体移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine public clas
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发常用实践操作之按动任意键触发

    接下来一些笔记会对于一些大大小小的实践操作进行记录 希望对你有所帮助 在游戏中 我们经常会遇到一些按动任意键触发的操作 接下来展示核心代码 以下是对于Unity中的操作 使用的UI是NGUI 对于核心操作没有影响 你可以自己置换 void
  • 游戏开发常见操作系列之敌人系统的开发一(U3D)

    在开发游戏的过程中 我们常常会出现一些敌人攻击我们玩家 并且实现掉血以及死亡的现象 敌人还会源源不断地生成 这是怎么制作的呢 接下来为大家提供方法 其中使用了NGUI 后续会更新其它方法 敬请期待 使用HUDText实现扣血时显示文本 直接
  • 游戏开发中常见系统梳理之背包系统的实现一

    游戏中几乎都存在大大小小的背包系统 接下来我将讲述背包系统具体是如何实现的 完整源码 以下是使用unity NGUI实现 使用txt配置的方法 后续更新UGUI Json实现的背包系统敬请期待 背包中的物品我们常常将其制作成预设体 通过改变

随机推荐

  • 左程云算法笔记025

    map和哈希map的使用 cpp 此文件包含 main 函数 程序执行将在此处开始并结束 include
  • LINUX下查看点云图————point cloud(.ply .vtk .pcd)

    首先 你要确定点云的格式 pcd vtk 还是 ply 如果是 pcd vtk 那么可以用pcl工具查看 1 安装pcl 官网链接点击打开链接 sudo add apt repository ppa v launchpad jochen s
  • python可使用什么退出死循环_碰到python死循环后要怎么退出结束?

    每当编写代码行云流水 却突然碰到代码无限循环 这是非常让人头疼的 难道直接退出程序运行嘛 答案肯定是不行 怎么跳出呢 一起来看下吧 案例 遇到的问题是这样的 如果我定义了一个死循环线程我该如何终止它 我发现用全局变量的方法根本不好使 pys
  • python基础 - networkx 绘图总结

    目录 1 创建方式 2 基本参数 3 DiGraph 有向图 4 Graph 无向图 5 有向图和无向图互转 6 一些精美的图例子 networkx是一个用Python语言开发的图论与复杂网络建模工具 内置了常用的图与复杂网络分析算法 可以
  • 【科普向】LaTeX简介(一篇极简的 LaTeX 介绍文章)

    文章目录 LaTeX诞生背景 TeX和LaTeX LaTeX主要功能 文档结构 数学公式 公式块 我们平时在word里新建一个doc x 文件后 输入内容 调整页边距 字体大小 行间距等待 然后交给打印机打印就可以了 如果你写了一篇关于新疆
  • Qt获取控件位置,坐标总结

    总结的结果是 QMouseEvent中两类坐标系统 一类是窗口坐标 一类是显示器坐标 总结一 经过试验 QMouseEvent globalPos 和 QCursor pos 效果一样 但是Qt帮助文档说不一样 可是我获得值确实相同的 QC
  • 手把手搭建Python量化交易平台-2:量化策略的原理与整体架构

    摘要 探讨量化策略的整体架构 一 量化策略的原理与整体架构 1 输入数据 来自于金融数据共享平台 1 行情或技术面数据 K线数据 MA均线数据 MACD数据 2 财务或基本面数据 国家宏观经济 行业经济 公司财务数据 3 自定义数据 4 投
  • 看懂今天这个!你就是个真正的javaer!

    昨天 猿人君已经教会你搞对象了 听说 由于文字篇幅有限 讲得不明白的地方 大家关注公主号猿人工厂 或者加入qq群765605694 猿人工厂君 手把手的免费教你 恭喜你 从此开始一段新的人生 跨越上和大海 抽象人山人海 在过去的几天里 你已
  • 单词统计

    题目描述 输入一行字符 统计其中有多少个单词 单词之间以空格分隔 输入 一行英文字符 含空格 输出 单词的个数 单独占一行 样例输入 I am a boy 样例输出 4 代码 Java版 import java util Scanner p
  • 毕业后的五年拉开大家差距的原因在哪里?

    有人工作 有人继续上学 大家千万不要错过这篇文章 能看到这篇文章也是一种幸运 真的受益匪浅 对我有很大启迪 这篇文章将会改变我的一生 真的太好了 希望与有缘人分享 也希望对有缘人有所帮助 看完之后有种 相见恨晚 的感觉 特别激动 希望大家好
  • Eclipse环境下通过Cygwin使用NDK编译jni程序

    一 认识Cygwin NDK和jni 首先来认识一下什么是Cygwin NDK和jni Cygwin Cygwin是一个在windows平台上运行的unix模拟环境 它对于学习unix linux操作环境 或者从unix到windows的应
  • java 动态生成 visio----aspose.diagram for java

    最近在鼓捣java 如何生成visio图表 苦于没有API 找到了aspose这个神器 下载试用版本之后 发现最多只能生成10个元素 而且有水印 下面尝试如何去掉水印与元素限制 本文章所涉及的软件均可从网上获取 但是只能用于学习之用 不能用
  • idea使用http客户端上传文件

    controller 文件上传 param file return PostMapping value fileUpload ResponseBody public String uploadSkuImage RequestParam fi
  • 初始C语言——从大到小排序

    三个数的排序 三个数之间两两比较类似于三个数中显示最大值 两两比较 但是有一个问题 最大值问题只需要输出最大值即可而排序问题则还要排序 那么我们是否可以确定三个位置x y z将最大值依次赋值给x y z确保输出时x y z的位置是从左到右输
  • 真二次元!动漫形象风格迁移

    点击上方 机器学习与生成对抗网络 关注星标 获取有趣 好玩的前沿干货 文章 机器之心 一张输入人脸图像 竟能生成多样化风格的动漫形象 伊利诺伊大学香槟分校的研究者做到了 他们提出的全新 GAN 迁移方法实现了 一对多 的生成效果 在 GAN
  • 【JVM】JVM-codecache内存区域介绍

    1 概述 转载 https leokongwq github io 2016 10 12 maven test html 2 JVM codecache内存区域介绍 大家都知道JVM在运行时会将频繁调用方法的字节码编译为本地机器码 这部分代
  • 网络层_数据平面_四(题目完成)

    网络 引入网络层学习 分组交换 虚电路VC 数据报网络 CIDR DHCP 路由器 IP数据报格式 IPv4 IPv6 过渡策略 双栈 隧道 特殊IP地址即内部IP地址 流表中匹配 动作 计算机自顶向下方法 第七版课后习题及答案 正在更新中
  • 论文解读:Investigating the Factual Knowledge Boundary of Large Language Models with Retrieval Augmentati

    论文解读 Investigating the Factual Knowledge Boundary of Large Language Models with Retrieval Augmentation 一 动机 Knowledge in
  • C++ 智能指针我得用用看

    文章目录 0 前言 0 1 使用智能指针的原因 0 2 智能指针和普通指针的区别 什么是智能指针 1 auto ptr 1 1 基本说明 1 2 例子 chestnut 1 3 使用建议 3 unique ptr 3 1 实现原理 3 2
  • [游戏开发]网络同步方式

    状态同步 优点 数据在服务器运算 客户端接收到的数据一定准确 防止数据作弊 角色数据在服务器 客户端只上传操作 想作弊没门 网络波动不敏感 多端表现可以不一致 重视数值准确 缺点 前后端数据包体大 服务器压力比较重 计算量 传输量 研发特点