J'ai un système faisant autorité, où lorsque le joueur rejoint le match, il obtient tous les objets déjà générés - générés sur lui-même (le client).
Cela ressemble à ceci:
Client
envoie le jeton d'accès auServer
Client
reçoit l'acceptation duServer
Client
bascule la scène sur la scène du jeuServer
envoie des joueurs, des caisses, des objets avecclient
lesquels vous pouvez interagir afin qu'ils puissent apparaître et les afficher.
Mais qu'en est-il de l'objet au sol? Pour l'instant, j'ai exactement la même scène sur le serveur et le client - avec un plan statique faisant office de plancher. Actuellement, j'ajoute de nouvelles choses, des arbres, des escaliers et je construis des choses ensemble.
Je pensais - nous sommes bons. Mais l'environnement ne devrait-il pas aussi être synchronisé? Être en réseau en quelque sorte? Possédé par le serveur?
Prenons League of Legends
:
C'est un environnement statique, probablement un maillage combiné (escaliers, gazon, murs, magasin). Mais est-il vraiment conservé sur le client ou envoyé par le serveur lors de l'écran de chargement?
la source
Réponses:
Pour la plupart, non, les actifs artistiques de toute nature ne sont pas systématiquement envoyés sur le réseau. En général, tous les clients auront les mêmes actifs de contenu localement. Il peut y avoir du code pour s'assurer que c'est le cas via la somme de contrôle du contenu, ou similaire. Si vous craignez que les utilisateurs n'altèrent certains de leurs contenus côté client, vous pouvez implémenter un système similaire.
Le serveur peut envoyer des directives au client indiquant qu'il doit afficher ou masquer certains actifs, mais il n'enverra pas les données réelles de l'actif. Ceci est, en pratique, trop de gaspillage et de lenteur, et pourrait causer de réels problèmes aux personnes disposant de données limitées.
Dans certains cas, des actifs plus petits peuvent être diffusés dans leur intégralité si l'actif est en quelque sorte considéré comme un «spoiler» ou autre. Mais c'est rare. Généralement, ce que vous voyez, c'est qu'un jeu peut télécharger du nouveau contenu à partir d'un correctif ou autre, mais cela ne se produira qu'une seule fois, pendant le processus de correction au démarrage. Pas pendant le gameplay.
la source
Cela dépend de plusieurs facteurs, y compris le type de jeu (je suppose que RTS ici, bien que le MMO en monde ouvert me vienne également à l'esprit). Un état de terrain de base local vers le joueur est envoyé lors de la connexion ou fait partie des actifs du client - pensez à un jeu RTS où la carte est soit livrée avec le client, soit téléchargée avant le début du jeu.
En effet, le maillage ne serait généralement pas envoyé, comme il le serait déjà sur le client dans la plupart des cas RTS. La question de savoir si la carte de collision, qui est vraiment cruciale pour garder les deux synchronisés, est envoyée, est une autre question. Mais dans la plupart des RTS, cela serait à nouveau pré-stocké sur le client.
Donc, vraiment, tout dépend de ce que votre RTS est livré, que vous téléchargiez des cartes avant le début du jeu ou au moment où le jeu commence.
Après cela, il existe quelques façons typiques de rester synchronisé:
la source
Quant à votre question exacte telle que posée, je ne sais pas comment League of Legends la traite spécifiquement. Je n'ai jamais joué à ce jeu, je ne peux donc pas suggérer s'il le faut ou non.
Mais la réponse à votre question, en général, est assez simple et directe:
Si les données sont statiques et que vous savez avec certitude qu'elles ne changeront jamais (à moins de mises à jour périodiques complètes du jeu, mais c'est séparé), alors pourquoi voudriez-vous jamais envoyer ces données supplémentaires? Habituellement, vous essayez d'éviter d'envoyer tout ce qui peut être évité. N'envoyez des données que si cette communication est nécessaire .
D'un autre côté, si les données vont changer avec le temps , ou si vous voulez simplement laisser cette option ouverte, avez-vous vraiment le choix? Dans ce cas, vous devez envoyer les données. Sinon, le client n'a pas ce dont il a besoin.
Cela s'applique à toutes les communications réseau, pas seulement aux données de terrain. Tout .
la source
Non.
J'ai fait beaucoup de fouilles dans la source de League of Legends, et tout, y compris les modèles Champion, le commerçant, l'arrière-plan général de la carte et les créatures en peluche ajoutées après le fait (comme le petit écureuil sur des rochers et un escargot dans la rivière) sont conservés côté client. Le fait que le client possède tous ces modèles est l'une des raisons pour lesquelles LoL est de plusieurs gigaoctets.
Transférer toutes ces données du serveur au client serait un enfer, sans parler de l'utilisation de la bande passante pour recommencer le prochain jeu.
Alors, comment est-il résolu alors? Chaque joueur envoie SEULEMENT au serveur les données importantes pour les autres joueurs du jeu. Personne n'a besoin de savoir s'il vous reste 5 secondes sur le temps de recharge de Q, ou que la peau de Deep Terror Thresh crée des bulles pour vous. Les choses qui se transmettent dans le jeu sont des choses comme, Vel'Koz a lancé Q, Viktor s'est déplacé vers la gauche, etc.
Plus explicitement, en ce qui concerne l'écran de chargement, comme vous l'avez mentionné, des choses se produisent, comme des patchs intermédiaires, dont chaque joueur doit parler aux serveurs de riot avant le début du jeu, des connexions sécurisées et des protocoles anti-triche.
REMARQUE:
Si vous voulez regarder ce que le client a, et par conséquent, le serveur ne vous dépasse pas, recherchez le dossier C: \ Riot Games \ RADS \ lol_Game_Client \ Projects (qui pourrait être un peu éteint, pardonnez-moi I '' m travaille sur la mémoire en ce moment) et trouvez un décompresseur de fichiers .RAF en ligne. Ensuite, vous pouvez voir tout ce qui est hébergé localement, comme le chargement d'éclaboussures d'écran et de textures de peau, même des squelettes champions.
la source
Un exemple où cela n'a pas été fait était le Elder Scrolls Online, où il faisait confiance au client à propos de l'altitude du niveau du sol .
Les chercheurs d'or ont baissé le niveau du sol de plusieurs pieds. Ils pouvaient ensuite se promener «sous» le terrain et extraire des ressources par le bas sans être vus par les PJ ni attaqués par les PNJ.
Des modifications similaires leur ont permis de lisser les falaises afin de pouvoir les gravir, les retirer ou les passer sous les murs statiques, voir à travers tous les objets statiques, etc.
Essentiellement, le serveur a fait confiance au client quant à l'emplacement du joueur, le calcul de la collision côté serveur pour chaque joueur contre toutes les statistiques serait assez lourd.
Dans les jeux basés sur des tuiles comme Furcadia, cependant, c'est différent: chaque carré dans lequel vous vous déplacez a une capacité de marche côté serveur, et le serveur n'a pas besoin de faire confiance au client pour quoi que ce soit: le serveur connaît et valide chaque mouvement et action de l'utilisateur, et le client n'affiche l'action que lorsque le serveur lui indique le résultat.
la source