WECHAT

扫码添加微信

YoungFan 微信二维码
← 返回 和平精英绿洲启元坑点记录
踩坑记录已完成

客户端 Overlap RPC 可能早于服务端物理 Tick

低延迟下服务端收到 RPC 时碰撞缓存尚未更新,IsOverlappingActor 因而返回 False。

OverlapRPC物理 Tick

不需要玩家确认交互时,客户端在 Overlap 回调中立即发送 RPC。服务端收到请求后却判断 Overlap 尚未发生,IsOverlappingActor 返回 False。

这里有两个时序问题:

  1. IsOverlappingActor 只查询 OverlappingComponents 缓存,不会现场执行一次碰撞检测。
  2. 本地 DS 的前后端延迟很低,服务端可能在本帧物理 Tick 之前就收到 RPC,此时缓存还没有更新。

而且从流程上说,不需要玩家确认的交互无需绕客户端一圈。服务端触发 Overlap 后可以直接执行交互,再把结果通知客户端。

需要即时检测时,也可以使用 UKismetSystemLibrary.ComponentOverlapActors 代替 IsOverlappingActor。

Discussion

留言讨论

无需注册账号
正在加载留言区…

发表留言时,评论服务会记录必要的 IP 与 User-Agent 信息,用于安全审核和防止滥用。