public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) { if (stream.IsWriting) { BodySync.WriteStreamData().WriteToStream(stream); HMDSync.WriteStreamData().WriteToStream(stream); LeftHandSync.WriteStreamData().WriteToStream(stream); RightHandSync.WriteStreamData().WriteToStream(stream); } else { float lag = Mathf.Abs((float)(PhotonNetwork.Time - info.SentServerTime)); var streamData = new TransformStreamData(); streamData.ReadFromStream(stream); BodySync.ReadStreamData(streamData, lag); streamData.ReadFromStream(stream); HMDSync.ReadStreamData(streamData, lag); streamData.ReadFromStream(stream); LeftHandSync.ReadStreamData(streamData, lag); streamData.ReadFromStream(stream); RightHandSync.ReadStreamData(streamData, lag); } }
public void ReadStreamData(TransformStreamData streamData, float lag) { //Setup remote position. NetworkPosition = streamData.NetworkPosition; NetworkRotation = streamData.NetworkRotation; Direction = streamData.Direction; if (IsFirstTake) { Distance = 0; Angle = 0; Transform.localPosition = NetworkPosition; Transform.localRotation = NetworkRotation; IsFirstTake = false; } else { NetworkPosition += Direction * lag; Distance = Vector3.Distance(Transform.localPosition, NetworkPosition); Angle = Quaternion.Angle(Transform.localRotation, NetworkRotation); } }