My game is soooo jerky, on local player is not as much, but on the other players is terryble,how do i fix it for both but without vector.lerp? i am using photon view and photon transform.
inherit from interface “IPunObservable”
and then use function “OnPhotonSerializeView” to send and recive position and calculate lag to
to compute new position
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
if (stream.IsWriting)
{
stream.SendNext(myRigidbody.position);
stream.SendNext(myRigidbody.velocity);
stream.SendNext(currentSpeed);
}
else
{
networkPosition = (Vector3)stream.ReceiveNext();
networkVelocity = (Vector3)stream.ReceiveNext();
currentSpeed = (float)stream.ReceiveNext();
lastNetworkDataReceivedTime = info.SentServerTime; //timestamp
// float lag = Mathf.Abs((float)(PhotonNetwork.Time - info.SentServerTime));
networkPosition += networkVelocity * Mathf.Abs((float)(PhotonNetwork.Time - info.SentServerTime)); ;
}
}
private void UpdateNetworkedPosition()
{
float pingInSeconds = PhotonNetwork.GetPing() * 0.001f;
float timeSinceLastUpdate = (float)(PhotonNetwork.Time - lastNetworkDataReceivedTime);
float totalTimePassed = pingInSeconds + timeSinceLastUpdate; // lag
networkPosition += myRigidbody.velocity * totalTimePassed;
networkVelocity += (networkVelocity - myRigidbody.velocity) * Time.deltaTime * totalTimePassed * 50;
myRigidbody.MovePosition(Vector3.MoveTowards(myRigidbody.position, networkPosition, Time.deltaTime*currentSpeed));
}