Games104现代游戏引擎入门-lecture19 网络游戏的进阶架构
1 三大架构
unity向这个方向靠

虚幻引擎用的架构:

课程结构:
2 Character movement repication
角色位移的同步

1 插值
内插值和外插值

外插值:本质是预测,
1 内插值


把server来的状态搞到buffer中去,

内插的问题:两个客户端不一样,差个250ms
红车觉的撞行了,灰色车觉的没有,有这样的问题
2 外插值

如何预判下一步;
PVB算法,就是一个简单的插值,会看到一个蓝色的曲线一直在追绿色的线,绿色的线是真实的位置,看两条曲线的重合度,这里面有很多小tracker,很有的意思,可以解决一些边界条件。






有可能对方的游戏用了内插的方法,物理系统给了一个很大的反弹力。
通过以下的方法来解决:

FPS里很多都是反物理的,要不然很唐突。

有时候用内插,有时候用外插
每个方法都是好方法,能解决问题就是好方法。
3 Hit registration
如何打中别人。网络游戏中 的命中判定是很难的问题
1 问题如下:
目前没有很完美的解决方案。

击中别人并不存在一个正式的解。
2 由客户端来决定
非常符合人的感觉

服务器会做一个验证:

其实也会在本地做一些防作弊手段,
但是非常不安全,需要做很多特殊的处理。

3 由服务器来决定
最基本的问题:
解决方法:延时补偿
我把我这边的时钟回拨,根据算法猜测来补偿,
server收到开枪的时间的时候,已经差的很远了
当前的时间减去一系列那些时间,然后就可以了。如果网络是稳定的。

掩体:虽然你躲避了,但是你还是被打死了。
躲在掩体的人,冲出来的人有优势的。产生了不同的优势方和劣势方。
其他方法:
能帮玩家争取一些时间。
本地加特效,
4 MMOG NETWork 架构

最早的网络游戏:

1 子系统

2 MMO架构

1 Link layer

大厅:

2 交易系统

3 社交系统

4 匹配系统

5 数据存储系统

关系数据库
非关系数据库更快
内存数据库:
用的越来越多,

3 分布式


1 Challenges
对代码的安全性,鲁棒性要求就高了。
2 负载均衡

3 一致哈希算法来解决分布式存在的问题


删掉一个server
服务器少的时候,需要用以下的方法:
4 服务管理
是个非常重要的东西



5 Bandwidth Optimization
带宽非常重要,可以降低运营成本
1 计算带宽

2 数据压缩
把浮点数改成定点数:实战效果很好。

3 物体相关性

1 静态zones

2 AOI
很宽泛的概念,网络游戏降低带宽必须要做,节约了服务器的算力!
1 Direct Range-Query

2 Grid



3 十字链表法




4 PVS

4 降低频率

6 anti-Cheat


1 查内存

2 packers
被别人攻破了
内存混淆,

3 修改本地的资源
改变敌人的材质为透明啥的。
本地资源的哈希值
4 网络包的截获
网络包一定要加密。
1 加密
对称加密和非对称加密!


2 软件包


扫描内存
5 AI cheat
很难防!

数据统计系统来识别。

7 Build a scalable world
构建一个开放的世界!

1 zoning




2 复制

3 两个要结合

8 视频
下: