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

这里写目录标题

前言

位移移动

插值

内插适用于玩家会突然瞬移加速的情况,相对比较稳定(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作弊

根据用户大数据模型进行比较检测是否作弊

构建可扩展的游戏世界

相关推荐
mxwin3 小时前
Unity Shader 半透明物体为什么不能写入深度缓冲?
unity·游戏引擎·shader
晚枫歌F4 小时前
三层时间轮的实现
网络·unity·游戏引擎
努力长头发的程序猿8 小时前
Unity使用ScriptableObject序列化资源
unity·游戏引擎
mxwin9 小时前
Unity Shader 手写基于 PBR 的 URP Lit Shader 核心光照计算
unity·游戏引擎·shader
魔士于安9 小时前
Unity windows 同步 异步 打开文件文件夹工具
游戏·unity·游戏引擎·贴图·模型
笑虾10 小时前
cocos2d-x lua 加载 Cocos Studio 导出的 csb
游戏引擎·lua·cocos2d
魔士于安10 小时前
unity lowpoly 风格 城市 建筑 道路 交通标志
游戏·unity·游戏引擎·贴图·模型
mxwin10 小时前
Unity GPU Shader 性能优化指南
unity·游戏引擎·shader
董董女友1 天前
unity mcp 配置指南
unity·游戏引擎
垂葛酒肝汤1 天前
Unity的可视化网格和文字标签
unity·游戏引擎