Je pense avoir compris le fonctionnement qu'il faut adopté pour que le serveur puisse communiquer les informations qu'il reçoit afin qu'il y est une synchronisation sur le jeu.
Il me semble que j'ai déjà essayé de mettre en oeuvre ce fonctionnement décrit dans les articles avec cet effet lerp qui consiste à simuler cette synchronisation.
J'ai pris le code disponible dans le package de photon, et même avec celui ci la synchro est mauvaise.
Voici ou j'en suis avec ton code @younathgames
Code : Tout sélectionner
private Vector3 syncPosition;
private Quaternion syncRotation;
private Vector3 syncStartPosition;
private float coef;
private double m_LastNetworkDataReceivedTime;
void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
if (stream.isWriting)
{
stream.SendNext(GetComponent<Rigidbody>().position);
stream.SendNext(GetComponent<Rigidbody>().rotation);
stream.SendNext(currentSpeed);
stream.SendNext(isBoostAvailaible);
}
else
{
syncPosition = (Vector3)stream.ReceiveNext();
syncRotation = (Quaternion)stream.ReceiveNext();
currentSpeed = (float)stream.ReceiveNext();
isBoostAvailaible = (bool)stream.ReceiveNext();
m_LastNetworkDataReceivedTime = info.timestamp;
}
}
private void SyncedMovement()
{
float lastSynchronizationTime = Time.time;
float syncTime = 0f;
float syncDelay = Time.time - lastSynchronizationTime;
Vector3 syncEndPosition = syncPosition - transform.forward * currentSpeed * coef * syncDelay;
Quaternion syncEndRotation = syncRotation;
Quaternion syncStartRotation = GetComponent<Rigidbody>().rotation;
if (first)
{
syncStartPosition = syncPosition;
first = false;
}
else
{
syncStartPosition = GetComponent<Rigidbody>().position;
}
syncTime += Time.deltaTime;
GetComponent<Rigidbody>().position = Vector3.Lerp(syncStartPosition, syncEndPosition, syncTime / syncDelay);
GetComponent<Rigidbody>().rotation = Quaternion.Lerp(syncStartRotation, syncEndRotation, syncTime / syncDelay);
}
Le soucis c'est que je ne sais pas par quoi remplacer le boolean "first". Est ce le moment ou les joueurs se déplacent ?
Voilà j'ai un peu de mal à comprendre l'intégralité du code, le coef c'est une valeur que je peux modifier comme bon me semble ? moveVertical ( currentSpeed sur mon code ) est bien la variable contenant la vitesse actuelle du joueur ?
Je galère vraiment avec cette synchro, si vous pouvez m'accorder encore quelques éclaircissements ça m'aiderait grandement.
Merci à vous.