- Home /
PUN - Unity 2D Synchroniztion
Hello. I am working on a multiplayer 2D game in unity and I am using PUN(v1.0). I am not using transform view or rigidbody view nor anyother views. I am only using Photon view in my Player and made the photon view observe the following script which is given below to sync the players.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NetworkCharcater : Photon.MonoBehaviour {
public Rigidbody2D rb;
private Vector2 remoteVelocity;
private Vector3 realPosition=Vector3.zero;
private Quaternion realRotation=Quaternion.identity;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (!photonView.isMine) {
transform.position = Vector3.Lerp (transform.position, realPosition, 0.1f);
transform.rotation = Quaternion.Lerp (transform.rotation, realRotation, 0.1f);
rb.velocity += remoteVelocity;
}
}
public void OnPhotonSerializeView(PhotonStream stream,PhotonMessageInfo info){
if (stream.isWriting) {
stream.SendNext (transform.position);
stream.SendNext(transform.rotation);
stream.SendNext (rb.velocity);
} else {
realPosition = (Vector3)stream.ReceiveNext ();
realRotation = (Quaternion)stream.ReceiveNext ();
rb.velocity = (Vector2)stream.ReceiveNext ();
float lag = Mathf.Abs ((float)(PhotonNetwork.time - info.timestamp));
remoteVelocity = rb.velocity * lag;
}
}
}
It works fine.But I am not satisfied with the synchronization and still has some delay in synchroniztion. It is an action fighting game, so I want to get a perfect sync. Please help!! What is the best way to sync the data perfectly(2D game)??
in general, there is nothing like "perfect sync"
you can only try to achive "best way to fake the player into believing that what he sees is actually real"
In general i found that ins$$anonymous$$d of going by a velocity synchronization, using a slightly in the future predicted position and then lerping there works good. (That is as long as you don't crash in things with full speed. It will look like the other player clips in the wall for a short moment.
So in general your idea of better "data syncing" is perhaps the wrong side to start. The sync already works as good at it will get. Now the only thing you can do is take some math and try to tweak with some predictive methods to try and get the most out of it.
Your answer
Follow this Question
Related Questions
What's the best method to implement multiplayer on a Billiard game ? 1 Answer
Photon disconnect after switching from mobile data to WIFI 1 Answer
Player Won't Instantiate with Photon Unity Network [PUN] 0 Answers
Photon Network instantiate problem when Master changes 0 Answers
In Photon how to execute queue messeges (RPC buffer) before spawning player into room ? 0 Answers