Bonjour à tous,
je suis nouveau ici (enfin c'est mon premier post).
Je suis informaticien spécialisé en système et réseau.
Et développeur amateur à mes heures perdues.
Actuellement je développe un jeu 3D qui si je vous le décrit va me faire passé pour un doux dingue ... donc pour faire simple c'est un MMO persistant.
Ce que je peux vous dire en 2 mots, c'est que l'infra matériel et logiciel existe déjà (sous forme d'un datacenter virtualisé reposant sur 3 serveur PowerEdge 2950. Du pro quoi). Et niveau compétence, en codage je pense maîtriser assez le C# pour m'attaquer a ce genre de projet.
Je vous passe les détails du scénario et de l'univers pour en venir à ma question.
Contexte :
1. J'ai un client en Unity3D qui fonctionne bien au niveau gameplay.
2. J'ai un service Windows qui fait office de serveur de jeu, que j'ai créé pour être modulaire. Comme ce serveur est sensé tourner 24/24 7/7, j'ai tout de suite tenu compte des problèmes de performances, de charge et les éventuelles pannes coté serveur. J'ai donc décidé de faire reposer mon "serveur de jeu" sur un ensemble de MJ (maître de jeu) indépendants pour pouvoir gérer tout ça. Chaque MJ a ses propres thread et est gérer par le service. Le service peut instancier différents MJ. Actuellement phase de developpement, le serveur instancie tous les MJs. Mais au final normalement chaque MJ sera herbergé sur un serveur différent ('est le meme exe, simplement démarrer avec des options différentes).
L'infrastructure coté serveur se découpe donc comme suit :
Une DB SQL hébergée sur un serveur Windows en interne (LAN)
Un service codé en C#, multithread, multiclient, qui implémente plusieurs MJ, et en particulier des MJ que j'appel MJSysteme et qui gère les différentes zones jouable du jeu.
Voilà a quoi ressemble mon serveur
Mon problème c'est de savoir au niveau conceptuel comment instancier les zones jouable coté serveur.
Les joueurs vont entré en jeu en se connectant a un MJSystème qui leur est attribué. Ce MJSysteme doit pouvoir gérer l'environnement du jeu comme un joueur. Donc il va devoir faire plein d'opérations 3D. Ma question est donc de savoir comment instancier ces zones jouables coté serveur, sans trop impacter les performances, en tenant compte que coté serveur c'est pas une machine de jeux avec une carte graphique de ouf, mais une machine virtuelle hébergée sur un serveur professionnel haute performance. Donc niveau graphique faut pas compter sur un GPU. Par contre CPU et RAM y en a à revendre
Question :
Est-ce qu'il faut que je charge la scène Unity pour simuler coté serveur tout ce qui se passe dans la scène aux niveaux des joueurs et "bénéficier" des fonctions de Unity, comme les collisions, pour valider les actions de mes joueurs ?
Est-ce que la scène Unity peut être utilisé sans camera, sans représentation visuel et sans GPU ?
Ou vaudrait-il mieux recréer les environnement jouable dans une forme spécifique coté serveur ? Mais alors comment gérer la partie "3D" sans faire appel a Unity3D (recréer un moteur 3D coté serveur) ?
Tout remarque, suggestion ou idée me permettant de déterminer comment gérer mes zones jouables coté serveur est bienvenue.
Partager