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); }