Jeu 2D - Performances : Limite de prefabs, stockage datas...

Toutes les questions sur le développement Mobile, y compris la partie script.
Dev_
Messages : 2
Inscription : 16 Août 2018 13:21

Jeu 2D - Performances : Limite de prefabs, stockage datas...

Message par Dev_ » 16 Août 2018 13:55

Bonjour à tous :cote:

Débutant sur Unity, je suis actuellement en train de developper (sans pression, pour le plaisir) un petit jeu de simulation de bataille, que j'aimerais voir peut être un jour sur mon mobile ;) .

J'ai quelques questions dont je n'arrive pas franchement à avoir les réponses avant d'entrer dans le dur du développement, et j'aurais besoin du retour d'expérience de confirmés !

Donc il s'agirait d'un jeu de simulation de bataille en 2D :

1) Combien d'objets 2D peut-on avoir simultanément à l'écran avant que le jeu ne sature niveau performance ? (je suppose que ça dépend aussi du mobile, mais globalement sur un mobile vieux de 3/4 ans par rapport à aujourd'hui peut être ?). J'estime le nombre à environ 2000 sur mon jeu (avec les troupes et leur animation, les projectiles, de possibles animations d'explosions etc...)

2) Quelle est la meilleure façon de créer/détruire ces objets (niveau performance) ? Je sais qu'ils doivent être des préfabs, j'ai cru lire aussi qu'il fallait éviter instantiate/destroy sur mobile, comment faire alors ? J'ai lu qu'on pouvait utiliser des pools d'objets à activer/desactiver, mais je ne pense pas que ça irait dans mon contexte vu qu'on ne peut pas prédire à l'avance le nombre d'objets...

3) Concernant les datas, j'en aurais sûrement un grand nombre et je préfère en avance me demander quelle est la meilleure façon de les stocker (toujours en performance) ? Dois-je simplement faire une classe par troupe ou bien utiliser des ScriptableObjects ? (Là c'est aussi au niveau de la gestion des objets, ajout/modification/suppression...)

4) Je me suis toujours demandé : à quel moment instancier/loader les éléments (ex: troupes) du jeu ? Faut-il le faire au lancement du jeu, en créant tous les objets, faut-il le faire après que le joueur ne clique sur "Attaquer" ?

5) Dernière question pour ma culture, est-il moins gourmand d'utiliser des Raycasts par exemple plutot que de faire des conditions style "si joueur possède même coordonnées X alors..." ? Je me demande car j'ai un peu galeré avec des Raycasts et j'ai fini par toucher aux positionnements des objets avec leur coodonnées pour faire ce que je voulais :gene: .

Merci à ceux qui ont pris le temps de me lire et à ceux qui potentiellement pourront m'aider a répondre à ces interrogations ! :amen:

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Jeu 2D - Performances : Limite de prefabs, stockage datas...

Message par Alesk » 17 Août 2018 10:04

Salut,

Je n'ai pas toutes les réponses, mais en voici quelques-unes :

2) Il FAUT utiliser des pools d'objets dès que tu le peux. Même si tu ne sais pas à l'avance combien tu auras d'instances.
Un système de pooling classique est censé te permettre d'ajouter des éléments autant que possible. Tu peux démarrer ton jeu avec X instances dans le pool, et après si tu as besoin de plus d'objets, tu en instancies de nouveaux au fur et à mesure des besoins.
L'idée c'est surtout de ne pas les détruire ensuite.
Par exemple tu commences la partie avec 100 instances dans le pool, arrivé à 100 objets utilisé, si tu en as besoin d'un de plus, tu créé simplement une nouvelle instance dans le pool.
Selon leur utilisation, tu peux aussi prédire plus ou moins de combien tu risques d'en avoir besoin ensuite, donc au lieu d'en instancier un seul, tu peux aussi en instancier 10 ou 20 en une seule fois, comme ça tu as de la marge pour les instanciations suivantes.

En plus d'éviter la surcharge qu'occasionne la création/suppression des éléments, le pooling sert aussi à limiter la fragmentation de la mémoire, donc plus tu créés d'éléments d'un coup, et moins ta mémoire sera fragmentée.

3) Il faut faire un mix entre les classes et les scriptableobjects, mais là c'est vraiment à voir au cas par cas... pas simple de donner une réponse générique.

4) Il vaut mieux en créer le plus possible dès le départ, ça évite les éventuels lag dues à l'instanciation durant la partie... Tu peux aussi automatiser les instanciations à l'avance lorsque ton stock d'objets dans le pool commence à être bas, par exemple lors de certaines phases du jeu où il ne se passe pas grand chose et où tu es sûr que ça ne va pas gêner le joueur d'avoir un petit lag... Là encore faut que le type de gameplay le permette... Au pire y'aura des petits lags.
Faudrait voir si y 'a moyen de déporter ça sur un thread secondaire.

5) Les Raycast sont déjà normalement pas mal optimisés, donc ça ne devrait pas poser de problème. Mais pour ce qui concerne les collisions, les cas sont tellement variés qu'il faudrait me donner exemple concret pour que je te dise quelle approche serait la plus optimale.

Avatar de l’utilisateur
Liven
Messages : 268
Inscription : 30 Nov 2017 01:48

Re: Jeu 2D - Performances : Limite de prefabs, stockage datas...

Message par Liven » 17 Août 2018 14:26

Super réponses d'Alex.

Sinon pour ta première question, pour le nombre objet affichable à l'écran, il faut que tu te renseigne concernant les draw call et comment les batcher.

Répondre

Revenir vers « Développement plateformes mobile Iphone et Android »