Partage
  • Partager sur Facebook
  • Partager sur Twitter

Unity - Physique, Reseau et prédiction client

    31 août 2019 à 23:46:35

    Bonjour,

    Je viens poster ici car je suis en train d’expérimenter toutes les solutions possible pour réussir a faire une bonne syncro en réseau de plusieurs rigidbody (joueurs, et aussi NPC) et en gardant la physique d'unity la plus fidèle possible, je me suis bien rendu compte que ce n'était vraiment pas quelque chose de simple, du coups j'ai besoin de votre précieuse aide.

    Actuellement pour mes test, j'ai créer une simple scene avec juste un plane. Les joueurs controles chacun une balle (qui est un rigidbody), et il sont censé pouvoir se bousculer, rebondir, etc... la physique du moteur unity quoi.

    Pour le réseau j'utilise Mirror (https://mirror-networking.com/), et je synchronise les balles avec NST  (https://github.com/emotitron/NetworkSyncTransform).

    J'ai tenté deux approches, la premiere:

    Les joueurs spawn par le netmanager sont directement le gob de leur propre ball, avec le local authority pour que le client puisse la controler.

    Le client la controle chez lui et le NST se charge de transmettre le mouvement sur le réseau.

    Le problème ici c'est que lors d'une collision entre deux balles, la physique ne s'applique plus correctement (il n'y a pas de rebond, surtout si c'est  un client et pas le serveur  qui tape avec sa balle). A mon avis du fait que chaque ball ne peux être controller que par son client.

    Voici la deuxieme approche:

    Le netmanager spawn un gameobject joueur(qui est le joueur réseau et a le local authority), et en même temps il spawn sa balle (qui du coup est un gameobject non-joueur qui n'a pas le local authority), et via RPC je met a jour dans mon gameobject joueur la référence de la balle.

    Ensuite le gameobject joueur se chargera de récupérer les inputs chez le client, et de les envoyer via une Commande au serveur qui lui va faire bouger la balle et le NST qui est attaché a la balle va tout simplement retransmettre a tous le monde la position de la balle.

    La physique est parfaite ! Mais le problème ici vous vous en doutez, c'est qu'il n'y a aucune prédiction coté client et du coup il faut attendre le retour du serveur pour enfin voir notre balle bouger, et cela se ressent très fort in-game, pas de réactivité du tout dans les mouvements.

    Mais comment je peux faire une prédiction client sur un objet qui n'est pas "local authority"? N'y a t'il pas un moyen pour pouvoir avoir l'authority sur le client (mais du coup ne pas update pas sa position via le NST) pour pouvoir bouger sa balle en local tout en envoyer les inputs au serveur et du coup désactivé la physique automatique et envoyer un deltatime au serveur? Sinon j'imagine que la physique ne sera pas "syncro" (voir https://docs.unity3d.com/ScriptReference/Physics.Simulate.html ) . Et éventuellement faire les correction quand le serveur répond.

    Mais je ne comprend pas parceque j'ai l'impression que j'ai l'authority sur l'un ou l'autre, il n'y a aucun moyen de l'avoir sur le serveur mais que le client puisse quand même et juste en local faire des changement sur sa balle

    Voila si quelqu'un a quelques indices ou une idée a mon problème,

    Merci de m'avoir lu jusqu'ici :)

    • Partager sur Facebook
    • Partager sur Twitter

    Unity - Physique, Reseau et prédiction client

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown