当前位置: 首页 > article >正文

Games104——网络游戏的进阶架构

这里写目录标题

  • 前言
  • 位移移动
    • 插值
      • 内插(Interpolation)
      • 外插(Extrapolation)
  • 命中判定
    • Hit Registration
      • 在客户端去判定
    • 在服务器端去判定
    • 延迟补偿
    • 掩体问题
      • 躲进掩体
      • 走出掩体
    • 技能前摇
    • 本地暴击效果
  • 基础MMO框架
    • 分布式架构
      • 一致性哈希
      • 服务管理
  • 带宽优化
    • AOI
      • 画格子
      • 十字链表
      • PVS
  • 反作弊
    • 查内存Obfuscation Memory
    • 确认本地文件哈希值
    • 网络包进行加密
    • 防范软件注入作弊
    • 防范AI作弊
  • 构建可扩展的游戏世界

前言

在这里插入图片描述

位移移动

插值

在这里插入图片描述
内插适用于玩家会突然瞬移加速的情况,相对比较稳定(FPS,MOBA)
外插适用于整个运动符合物理学规律的情况,预测他的速度是比较准确的
游戏内通常会都使用,人物使用内插,载具使用外插

内插(Interpolation)

会加剧延迟,对高速移动的游戏应用是会产生偏差,尤其涉及到玩家碰撞的情况下

外插(Extrapolation)

考虑信息在传播时的延迟,预判对方的行动
PVB
不会看到物体的位置瞬间改变,而是逐步的变化
在这里插入图片描述
在这里插入图片描述
外插值的问题,会导致碰撞的两个物体相互穿到一起,物理引擎会将他们弹飞
解决:
当检测到两个物体重叠了就会将位置控制器转换到物理来控制,然后再转回去
在这里插入图片描述

命中判定

如何判定敌人的距离,怎么判断是否命中他?
在这里插入图片描述

Hit Registration

在不确定的网络环境下有无命中目标没有一个确定的解

在这里插入图片描述

在客户端去判定

符合人的直觉,高效,精确,手感好,但不安全,一旦客户端被破解就可以作弊
开枪瞬间发出一条射线,只要敌人在射线上则判定为被击中
在这里插入图片描述
服务器会对这个结果进行检验
在这里插入图片描述
客户端发送包含完整射线信息的碰撞事件到服务器
(StartPoint、HitPoint和HitObject)
验证StartPoint是否真的足够接近射击者
验证HitPoint是否真的属于HitOject
从StartPoint和HitPoint投射光线,确保路径上没有障碍物。

在服务器端去判定

会因为网络延迟造成误差,很难打中正在运动的物体
在这里插入图片描述

延迟补偿

猜测在每一个开枪者开枪的瞬间是什么情况
前提是要对目前的情况做一个快照,从而找到过去的情况
如果客户端进行攻击(如断网)就可以无视,防止作弊
在这里插入图片描述
在这里插入图片描述

掩体问题

躲进掩体

如果躲到掩体后还是被打死了
因为延迟的问题,被击中人已经躲进掩体,但开枪人视角里被击中人没有躲进掩体,服务器端以开枪人的世界为准,所以会出现这种情况

走出掩体

走出掩体瞄准敌人时,尽管狙击手已经走出掩体,会因为网络延迟的原因,敌人还没看到射击手走出掩体时就被击毙

技能前摇

能够给网络同步争取时间
在这里插入图片描述

本地暴击效果

在本地检测到命中时播放特效,但结算还是以服务器的计算为准,观感上会变好
在这里插入图片描述

基础MMO框架

在这里插入图片描述

  • Link层:负责玩家登录和拦截恶意攻击
  • Lobby:大厅,一个特殊的游戏模式,作为一个缓冲池
  • Character Server:管理计算玩家的信息
  • 交易系统:要保证数据的安全性足够高,全部都可以RollBack
  • 社交系统:玩家之间的交流,邮件
  • Matching:匹配同类型的玩家(玩家的段位,网络延迟相似)
  • 数据的存储:关系数据库,非关系数据库(速度更快,游戏里很多GameState,Loging数据都使用了这个数据库),内存数据库
    当玩家过多时服务器承载不了怎么办

分布式架构

在这里插入图片描述
解决附载均衡
在这里插入图片描述

一致性哈希

使用哈希算法把用户分配到服务器上
在这里插入图片描述

服务管理

在这里插入图片描述
注册唯一标识后可以随时检查服务状态并给所有观察者发送信息

带宽优化

计算带宽
在这里插入图片描述
数据压缩
将浮点数转换为定点数记录,有时为了配合这个算法还会对地图进行分割,很高效,有时能将数据压缩到一半以上
在这里插入图片描述

AOI

以自己为中心只关注距离自己一段距离内的情况
在这里插入图片描述

画格子

空间换时间,将空间划分为格子,当物体在玩家的范围内时将其加入观察列表
在这里插入图片描述

十字链表

将所有物体的x,y轴分别排序,如果该物体在xy轴的位置都与玩家观测的范围相交,则说明在观察范围内
在这里插入图片描述

PVS

根据目前玩家的位置设置潜在的可视范围,其他的位置不关注
在这里插入图片描述
根据引用主体的远近去调整信息同步的频率

反作弊

查内存Obfuscation Memory

对单机游戏比较有用

  • 把客户端加密
  • 内存混淆,把高度敏感的数据在内存中进行加密,只有读写的时候解除

确认本地文件哈希值

客户端检测本地文件的哈希值和服务器端的是否相同,如果篡改了直接将玩家下线

网络包进行加密

在这里插入图片描述
非对称加密
客户端只有一个公钥,服务器端有一个私钥,客户端的公钥被破解了也无法获取到信息,因为没有私钥

防范软件注入作弊

扫描内存中的文件签名,检查是否被修改过,检查到就进行报警

防范AI作弊

根据用户大数据模型进行比较检测是否作弊
在这里插入图片描述

构建可扩展的游戏世界

在这里插入图片描述


http://www.kler.cn/a/530223.html

相关文章:

  • Workbench 中的热源仿真
  • 标准IO与文件IO 进程与线程
  • 芯片AI深度实战:给vim装上AI
  • 新能源算力战争:为什么AI大模型需要绿色数据中心?
  • unity学习24:场景scene相关生成,加载,卸载,加载进度,异步加载场景等
  • 单细胞-第四节 多样本数据分析,下游画图
  • 分享10个实用的Python工具的源码,支持定制
  • Java项目: 基于SpringBoot+mybatis+maven+mysql实现的图书管理系统(含源码+数据库+答辩PPT+毕业论文)
  • Python爬虫从入门到精通(三)简单爬虫的实现_爬虫tl
  • 问deepseek,如何看待ai降低学习成本而导致软件开发岗位需求降低,和工资下降。 软件从业人员何去何从?
  • 陆游的《诗人苦学说》:从藻绘到“功夫在诗外”(中英双语)mastery lies beyond poetry
  • 鸿蒙 循环控制 简单用法
  • 洛谷的更多功能(不会像其他文章那样复杂且仅支持Edge浏览器)
  • 《 C++ 点滴漫谈: 二十五 》空指针,隐秘而危险的杀手:程序崩溃的真凶就在你眼前!
  • 《手札·开源篇》从开源到商业化:中小企业的低成本数字化转型路径 ——SKF轴承贸易商的十年信息化演进启示
  • STM32单片机学习记录(2.2)
  • 【开源免费】基于SpringBoot+Vue.JS医院后台管理系统(JAVA毕业设计)
  • AJAX笔记原理篇
  • 12 向量结构模块(vector.rs)
  • 解决国内服务器 npm install 卡住的问题
  • 【课题推荐】基于t分布的非高斯滤波框架在水下自主导航中的应用研究
  • [Linux]如何將腳本(shell script)轉換到系統管理服務器(systemd service)來運行?
  • Hive之数据定义DDL
  • UE5 蓝图学习计划 - Day 7:摄像机与视角控制
  • 【爬虫】JS逆向解决某药的商品价格加密
  • 广度优先搜索算法笔记