private void OnLockStepEnd(IMessage msg, object ext)
    {
        LockStepEnd rsp            = (LockStepEnd)msg;
        int         serverKeyFrame = rsp.KeyFrame;

        _serverKeyFrame = Math.Max(_serverKeyFrame, serverKeyFrame);
        int msgTotal = rsp.MsgTotal;
        LockStepKeyFrameData lockStepKeyFrameData;

        if (_lockStepKeyFrameDataList.ContainsKey(serverKeyFrame))
        {
            lockStepKeyFrameData = _lockStepKeyFrameDataList[serverKeyFrame];
        }
        else
        {
            lockStepKeyFrameData = new LockStepKeyFrameData(serverKeyFrame);
            _lockStepKeyFrameDataList.Add(serverKeyFrame, lockStepKeyFrameData);
        }
        lockStepKeyFrameData.SetMsgTotal(msgTotal);
    }
 private void FixedUpdate()
 {
     //  2个客户端都登录后,才开始帧同步
     if (_loginInPlayerCount < 2)
     {
         return;
     }
     _nextKeyFrame = _currKeyFrame + Config.SYN_RATE_SERVER;
     if (_currFrame % Config.SYN_RATE_SERVER == 0)
     {
         // 当前关键帧结束
         LockStepEnd lockStepEnd = new LockStepEnd();
         lockStepEnd.KeyFrame = _nextKeyFrame;
         lockStepEnd.MsgTotal = _msgIndex;
         ServerUDPMgr.GetInstance().SendMsgToAll(MsgID.LockStepEnd, lockStepEnd);
         _currKeyFrame = _currFrame;
         _msgIndex     = 0;
     }
     if (_msgQueue.Count != 0)
     {
         foreach (LockStepServerMsgItem serverMsgItem in _msgQueue)
         {
             if (serverMsgItem.msgId == MsgID.SteerPositionReq)
             {
                 SteerPositionReq steerPositionReq = (SteerPositionReq)serverMsgItem.msg;
                 SteerPositionRsp steerPositionRsp = new SteerPositionRsp();
                 steerPositionRsp.PlayerId = serverMsgItem.sendPlayerId;
                 steerPositionRsp.X        = steerPositionReq.X;
                 steerPositionRsp.Y        = steerPositionReq.Y;
                 // 客户端将要执行该命令的帧
                 steerPositionRsp.KeyFrame = _nextKeyFrame;
                 steerPositionRsp.MsgIndex = _msgIndex;
                 ServerUDPMgr.GetInstance().SendMsgToAll(MsgID.SteerPositionRsp, steerPositionRsp);
                 _msgIndex++;
             }
         }
         _msgQueue.Clear();
     }
     _currFrame++;
 }