MMO游戏移动同步
MMO游戏与IO游戏的不同:
类型 | 视野内人数 | 交互性强弱 |
---|---|---|
MMO游戏 | 多,大到几百人 | 相对弱 |
IO游戏 | 少到一定范围,如最多10、20人等 | 强 |
因此,会采取不同的策略,来做移动同步。
类型 | 策略 |
---|---|
MMO游戏 | 需要控制流量,放缓同步间隔间隔 |
IO游戏 | 可以牺牲可接受的流量,适当频繁同步 |
本文下面,针对MMO游戏,提供一种移动同步方案。
本方案,综合参考了一些典型的 IO游戏移动同步、MOBA游戏移动同步。
同步的信息
服务器会向客户端发送同步信息
:
- 位置XYZ
- 状态
- 朝向XYZ (与锁定目标互斥。)
- 锁定目标(与朝向互斥。值为游戏对象ID)
客户端移动机制
-
客户端只有在下列情况向服务器发送移动事件
- 玩家开始移动
- 玩家停止移动
- 玩家改变方向
- 玩家改变速度
客户端收到服务器的
同步信息
,才会移动- 客户端朝最新的
同步信息
,做平滑追赶
服务器移动机制
- 服务器每帧更新移动状态
- 服务器收到客户端移动事件,都会向客户端(s)发送
同步信息
- 服务器逻辑触发端移动事件,都会向客户端(s)发送
同步信息
- 除特殊情况下,服务器每
1
秒向客户端(s)发送同步信息
(针对移动中的客户端) - 客户端处于静止状态,服务器不会定时向客户端(s)发送
同步信息
- 如果是玩家改变方向、改变速度,则服务器持续
3
次每100ms
向客户端(s)发送同步信息
服务器端3D建模的场景移动算法
前提条件:
- 已3D建模
- 能射线检查
- 有高度图
服务器每帧更新移动状态,假设某帧,从(x0, y0)点移到(x1, y1)点
可以按以下步骤完成目的点是否可行走:
- 通过高度图,可以得到完整坐标从(x0, y0, z0)点移到(x1, y1, z1)点
-
射线检查(x0, y0, z0+H) - (x1, y1, z1+H)间有无障碍物。
H值可以硬编码,射线检测要高点,不然沿着地面在做射线检测
- 检查 (x0, y0, z0) 、(x1, y1, z1)2点的z值高度差
- 只有无障碍物、z值高度差在一定范围: [-a, b]内,则可行走
以上
使用UDP包发送同步信息
由于MMO游戏的场景服务器,通常在网关服务器后面。
是否可以使用UDP包发送同步信息
,待考擦。