Exemple #1
0
 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)));
         }
     }
 }
Exemple #2
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);
    }