概述
Boss Room 项目采用了**客户端预测(Client-Side Prediction)**技术来解决网络延迟问题,提升玩家体验。该机制允许客户端在向服务器发送动作请求的同时,立即在本地执行动作的视觉效果,从而减少玩家感知到的延迟。
核心实现
1. 预测触发机制
客户端预测主要通过ClientInputSender类实现,当玩家输入触发动作时:
- 客户端创建
ActionRequestData结构 - 立即调用
m_ClientActionPlayer.AnticipateAction进行本地预测 - 同时将动作请求发送到服务器进行权威验证
// ClientInputSender 中触发预测的流程ActionRequestDataactionData=CreateActionRequestData();m_ClientActionPlayer.AnticipateAction(refactionData);// 本地预测SendActionRequestToServer(refactionData);// 发送到服务器2. 预测核心方法
AnticipateActionClient方法是客户端预测的核心,定义在Action基类中:
publicvirtualvoidAnticipateActionClient(ClientCharacterclientCharacter){AnticipatedClient=true;TimeStarted=UnityEngine.Time.time;if(!string.IsNullOrEmpty(Config.AnimAnticipation)){clientCharacter.OurAnimator.SetTrigger(Config.AnimAnticipation);}}该方法的主要功能:
- 标记动作效果为预测状态(
AnticipatedClient = true) - 记录开始时间
- 播放预期动画(如果配置了)
3. 预测条件判断
并非所有动作都会被预测,ShouldClientAnticipate方法决定了哪些动作可以被预测:
publicstaticboolShouldClientAnticipate(