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作弊

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

构建可扩展的游戏世界

相关推荐
qq_428639614 小时前
虚幻基础11:坐标计算&旋转计算
游戏引擎·虚幻
qq_428639614 小时前
虚幻基础09:帧运算
游戏引擎·虚幻
学游戏开发的5 小时前
UE求职Demo开发日志#19 给物品找图标,实现装备增加属性,背包栏UI显示装备
c++·笔记·游戏引擎·unreal engine
土了个豆子的10 小时前
unity中的动画混合树
unity·游戏引擎
学游戏开发的11 小时前
UE学习日志#19 C++笔记#5 基础复习5 引用1
c++·笔记·学习·游戏引擎·unreal engine
Dr.勿忘1 天前
C#面试常考随笔8:using关键字有哪些用法?
开发语言·unity·面试·c#·游戏引擎
Petrichorzncu1 天前
Games104——游戏引擎Gameplay玩法系统:基础AI
游戏引擎
我命由我123452 天前
游戏引擎 Unity - Unity 下载与安装
c语言·开发语言·c++·后端·unity·c#·游戏引擎
我命由我123452 天前
游戏引擎 Unity - Unity 启动(下载 Unity Editor、生成 Unity Personal Edition 许可证)
c语言·c++·后端·unity·c#·游戏引擎·ue4