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 视频
下: