void Update() { if (Time.time > m_NextPingSentTime) { m_Ping.PingSent(Time.time); m_ClientSession.Send(BitConverter.GetBytes(Time.time)); m_NextPingSentTime = Time.time + 1f; } if (m_ClientSession.GetRecvedData(m_ClientRecvedData)) { while (m_ClientRecvedData.Count != 0) { var data = m_ClientRecvedData.Dequeue(); m_Ping.PingBack(BitConverter.ToSingle(data, 0)); } } if (m_ServerSession.GetRecvedData(m_ServerRecvedData)) { while (m_ServerRecvedData.Count != 0) { var data = m_ServerRecvedData.Dequeue(); StartCoroutine(DelaySend(data, UnityEngine.Random.Range(0.1f, 0.3f))); } } }
void ClientUpdate() { if (m_ClientSession.GetRecvedData(m_ClientRecvedData)) { while (m_ClientRecvedData.Count != 0) { var data = m_ClientRecvedData.Dequeue(); StateMsg msg = new StateMsg(); msg.Unserialize(data); if (msg.TimeStamp > m_LastTimeStamp) { m_TargetPos = msg.TargetPosition; m_TargetRot = msg.TargetOrientation; m_StartPos = ClientObjectTF.position; m_StartRot = ClientObjectTF.rotation; m_TotalTime = (m_TotalTime - m_SimTime) + msg.TimeStamp - m_LastTimeStamp; if (m_TotalTime > 1f) { m_TotalTime = msg.TimeStamp - m_LastTimeStamp; } m_SimTime = 0; m_LastTimeStamp = msg.TimeStamp; } } } if (m_TotalTime < Mathf.Epsilon) { return; } m_SimTime += Time.deltaTime; float ratio = Mathf.Clamp01(m_SimTime / m_TotalTime); ClientObjectTF.position = Vector3.Lerp(m_StartPos, m_TargetPos, ratio); ClientObjectTF.rotation = Quaternion.Slerp(m_StartRot, m_TargetRot, ratio); }