不需要玩家确认交互时,客户端在 Overlap 回调中立即发送 RPC。服务端收到请求后却判断 Overlap 尚未发生,IsOverlappingActor 返回 False。
这里有两个时序问题:
IsOverlappingActor只查询OverlappingComponents缓存,不会现场执行一次碰撞检测。- 本地 DS 的前后端延迟很低,服务端可能在本帧物理 Tick 之前就收到 RPC,此时缓存还没有更新。
而且从流程上说,不需要玩家确认的交互无需绕客户端一圈。服务端触发 Overlap 后可以直接执行交互,再把结果通知客户端。
需要即时检测时,也可以使用 UKismetSystemLibrary.ComponentOverlapActors 代替 IsOverlappingActor。
Discussion
留言讨论
发表留言时,评论服务会记录必要的 IP 与 User-Agent 信息,用于安全审核和防止滥用。