48 lines
1.1 KiB
C#
48 lines
1.1 KiB
C#
using Photon;
|
|
using UnityEngine;
|
|
|
|
[RequireComponent(typeof(PhotonView))]
|
|
public class CubeExtra : Photon.MonoBehaviour, IPunObservable
|
|
{
|
|
[Range(0.9f, 1.1f)]
|
|
public float Factor = 0.98f;
|
|
|
|
private Vector3 latestCorrectPos = Vector3.zero;
|
|
|
|
private Vector3 movementVector = Vector3.zero;
|
|
|
|
private Vector3 errorVector = Vector3.zero;
|
|
|
|
private double lastTime;
|
|
|
|
public void Awake()
|
|
{
|
|
latestCorrectPos = base.transform.position;
|
|
}
|
|
|
|
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
|
|
{
|
|
if (stream.isWriting)
|
|
{
|
|
Vector3 obj = base.transform.localPosition;
|
|
stream.Serialize(ref obj);
|
|
return;
|
|
}
|
|
Vector3 obj2 = Vector3.zero;
|
|
stream.Serialize(ref obj2);
|
|
double num = info.timestamp - lastTime;
|
|
lastTime = info.timestamp;
|
|
movementVector = (obj2 - latestCorrectPos) / (float)num;
|
|
errorVector = (obj2 - base.transform.localPosition) / (float)num;
|
|
latestCorrectPos = obj2;
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
if (!base.photonView.isMine)
|
|
{
|
|
base.transform.localPosition += (movementVector + errorVector) * Factor * Time.deltaTime;
|
|
}
|
|
}
|
|
}
|