[DB - RS]Photon | Synchronisation des déplacements

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Narkos
Messages : 46
Inscription : 15 Août 2017 10:22
Localisation : Localisation impossible

Re: [DB - RS]Photon | Synchronisation des déplacements

Message par Narkos » 06 Jan 2018 14:06

Salut merci d'avoir posté la vidéo ;)

Dans la vidéo on dirait que le 2ème joueur ne bouge que lors des réceptions de nouvelles positions, t'es sûre que ton code update correctement la position du joueur entre chaque nouvelle position reçue?

T'as testé le mouvement de ton 2ème joueur avec une liste de positions fictives (sans passer par le réseau) pour vérifier que le mouvement de base des joueurs internet est fluide?

Sinon pour mettre à jour la position des joueurs avec photon, tu transmets bien les positions en ne conservant que le packet réceptionné le plus récent? (Sinon tu vas recevoir des anciennes positions, ce qui pourrait également provoquer l'effect de saccade vu dans la vidéo.)

yonathgames
Messages : 45
Inscription : 18 Sep 2017 17:44

Re: [DB - RS]Photon | Synchronisation des déplacements

Message par yonathgames » 06 Jan 2018 21:07

On a l'impression que le code de "lissage" ne fonctionne pas du tout. As tu testé sans lissage du tout? et as tu une différence?

MATT
Messages : 13
Inscription : 26 Déc 2017 02:57

Re: [DB - RS]Photon | Synchronisation des déplacements

Message par MATT » 07 Jan 2018 00:37

Salut

Pour les déplacements de mes joueurs j'ai simplement utiliser un transform dans l'update.
Et c'est vrai que je me suis pas pencher la dessus, est ce que ca peut poser un soucis dans la transmission des données selon vous ?

Le mouvement de base des joueurs est fluide, et j'utilise ce code basique c'est celui avec lequel j'ai le moins cet effet de saccades ( à l'heure d'aujourd'hui j'ai un peu moins de saccades que dans la vidéo, et le probleme aussi c'est que les joueurs se voient en décalé et non pas sur leurs position réelle, ca se joue a 1 sec environs, c'est très probablement lié)

Code : Tout sélectionner

    private void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        if (stream.isWriting)
        {
            stream.SendNext(transform.position);
            stream.SendNext(transform.rotation);
        }
        else
        {
            TargetPosition = (Vector3)stream.ReceiveNext();
            TargetRotation = (Quaternion)stream.ReceiveNext();
        }
    }
    private void SyncMove()
    {
        transform.position = Vector3.Lerp(transform.position, TargetPosition, 1f);
        transform.rotation = Quaternion.RotateTowards(transform.rotation, TargetRotation, 500 * Time.deltaTime);
    }


Oui sans le lissage c'est une catastrophe pure et dure, des téléportations toutes les secondes sur de longue distance,
je ne vois l'autre joueur qu'une fois qu'il a fini de se téléporter, enfin un carnage quoi

Merci de votre soutien dans ce terrible goulot =]

yonathgames
Messages : 45
Inscription : 18 Sep 2017 17:44

Re: [DB - RS]Photon | Synchronisation des déplacements

Message par yonathgames » 07 Jan 2018 15:53

Le code de lissage ne doit pas être le problème. Il y a forcément autre chose : normalement, sans ce code, il ne doit pas y avoir de "carnage" de cette sorte. Le joueur doit apparaître au bon endroit, au bon moment mais avec un rafraichissement qui est plus lent que notre update habituel. C'est de la l'effet saccade. Dans le tuto de palladin, il me semble qu'on voit bien cet effet et donc l'intérêt de ce code d'interpolation entre des positions qui sont bonnes.
Essais de repartir de zero, en suivant le tuto, pour voir si tu n'as pas rater quelque chose en route.
C'est peut-être pour cela que tu n'arrives pas à avoir un effet fluide puisque les coordonnées du player partent carrément dans les choux avant de revenir.
En écrivant, je me demande aussi si cela ne peut pas venir des valeurs stream que tu écris et récupères. Ce serait bon de les tracer avec debug.log afin de voir si tu ne récupères pas des valeurs à zero de temps en temps. ( C'est une bonne piste à mon avis)

Aller courage! Tu vas y arriver! :super:

yonathgames
Messages : 45
Inscription : 18 Sep 2017 17:44

Re: [DB - RS]Photon | Synchronisation des déplacements

Message par yonathgames » 07 Jan 2018 15:56

Ou peut être que ton transform passe par des valeurs zero : à vérifier aussi

yonathgames
Messages : 45
Inscription : 18 Sep 2017 17:44

Re: [DB - RS]Photon | Synchronisation des déplacements

Message par yonathgames » 07 Jan 2018 19:56

...et en relisant ton premier post je pense qu'il y a un problème dans ton FixedUpdate ( ou Update).
Il faut y indiquer :

Code : Tout sélectionner

if (!photon.view.IsMine)
{
fonction d'interpolation
}
else
{
fonction de management manuel du player  (ce que je ne vois pas dans ton code)
}
Du coup, il y a peut être interférences entre les deux joueurs?

MATT
Messages : 13
Inscription : 26 Déc 2017 02:57

Re: [DB - RS]Photon | Synchronisation des déplacements

Message par MATT » 07 Jan 2018 22:05

Dans mon code de base j'ai bien les déplacements manuels du joueur c'est juste que je ne les avaient pas mis dans mon premier poste

Code : Tout sélectionner

void Update(){
   if(view.isMine)
   {
      transform.translate(0,0, currentSpeed *Time.deltaTime );
   }
   else
      SyncMove();
}
Je vais essayer avec les Debug et je vais reprendre le tuto paladin du début en espérant trouver quelque chose d'intéressant :]
Merci

MATT
Messages : 13
Inscription : 26 Déc 2017 02:57

Re: [DB - RS]Photon | Synchronisation des déplacements

Message par MATT » 08 Jan 2018 00:37

Oue de retour, malheureusement sans bonnes nouvelles.
Quoi qu'il se passe j'ai toujours le soucis de position.

Je me connecte au serveur avec joueur 1 et 3secondes après je me connecte avec joueur 2
J2 voit J1 à sa bonne position ( pas non plus la position exacte mais c'est assez précis )
Mais quoi qu'il se passe J1 voit J2 en retard

Hors mis les saccades ( qui sont moindre que sur la vidéo que j'ai posté ), ce problème de position est encore plus gênant.
J'ai revu le tuto de paladin et ré-essayé les nombreuses options dispo dans le script transformView inclu dans le package, rien y fait, que c'est pesant :rougefaché:

Le fait que je rejoigne le serveur avec J2 quelques secondes en décalé peut il une coïncidé avec le problème de position ?

Narkos
Messages : 46
Inscription : 15 Août 2017 10:22
Localisation : Localisation impossible

Re: [DB - RS]Photon | Synchronisation des déplacements

Message par Narkos » 08 Jan 2018 18:35

Avec des petits bouts de code par-ci par-là c'est un peu dur de pouvoir vérifier correctement le déroulement du script.
Tu pourrais pas montrer un peu plus de ton code, genre la classe entière?

J'aimerais bien t'aider, mais perso j'ai besoin d'un peu plus d'infos

yonathgames
Messages : 45
Inscription : 18 Sep 2017 17:44

Re: [DB - RS]Photon | Synchronisation des déplacements

Message par yonathgames » 04 Fév 2018 17:53

Salut Matt!

Me voilà de retour après un long déplacement pendant lequel je n'avais pas mon PC.
Je vois que le topic est à l'arrêt... est-ce un abandon ou as-tu trouvé la solution?
Pour répondre à ta dernière question, il n'y a aucune incidence d'une connexion en décalé.
Par contre c'est sûr qu'en postant plus de code, tu nous aiderais davantage...

Tiens-nous au jus!

Répondre

Revenir vers « (C#) CSharp »