Esempio n. 1
0
    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);
    }