[RESOLU] Optimiser l'actualisation des provinces dans un jeu de grande stratégie.

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Armarius
Messages : 5
Inscription : 08 Jan 2024 18:30

[RESOLU] Optimiser l'actualisation des provinces dans un jeu de grande stratégie.

Message par Armarius » 10 Jan 2024 19:41

Bonjour.

Je travaille à la création d'un jeu de grande stratégie dans le style des jeux Paradox (c'est en moddant Crusader King II que j'ai eu l'idée de faire mon propre jeu avec Unity).
J'ai donc une carte subdivisée en provinces qui possèdent chacune leurs stats (population, impôts, soldats...etc) et s'actualisent chaque mois (le jeu se déroule en temps réel avec une horloge jour/mois/année qui tourne plus ou moins vite comme dans la plupart des jeux Paradox).

J'ai créé un petite map pour tester et développer les mécaniques du jeu avec une île de 9 provinces et ça fonctionne bien.
Sauf qu'à terme j'aimerais avoir dans les 1000 provinces sur une carte bien plus grande, et là bien évidemment ça fonctionne beaucoup moins bien (pour tester j'ai créé un script qui me génère 1000 provinces aléatoires) : arrivé au premier du mois, là où mes provinces doivent actualiser leurs variables et faire quelques calculs, le jeu freeze et met une bonne grosse minute à tout faire.

Je suis novice en script et je bidouille avec mes maigres connaissances, j'aurais besoin de vos conseils pour savoir comment m'y prendre pour que ça fonctionne bien, si il y a un moyen d'optimiser tout ça pour que les calculs se fassent rapidement où si il faut que je m'y prenne autrement ou que je revois mon gameplay.

Merci !

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6225
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Optimiser l'actualisation des provinces dans un jeu de grande stratégie.

Message par boubouk50 » 11 Jan 2024 10:22

Tes calculs doivent être extrêmement lourds pour faire freezer ton jeu pendant 1 minute :shock:
Sachant qu'une RTX 2080 est capable de faire 10 000 000 000 instructions à la seconde, je pense que le problème se situe sur ton calcul avant tout.
Peux-tu nous donner ton code de mise à jour des données de provinces ?

Aussi, pour info, la fonction Update () est gourmande (c'est relatif, bien sûr). À partir d'un certain nombre d'objets, il devient préférable de passer par une coroutine interne ou un manager qui lui a un Update () et fait appel à ses nombreuses références.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Armarius
Messages : 5
Inscription : 08 Jan 2024 18:30

Re: Optimiser l'actualisation des provinces dans un jeu de grande stratégie.

Message par Armarius » 11 Jan 2024 12:43

J'ai trouvé la source du problème.
Que tu me dises que c'était pas normal et qu'une RTX 2080 était capable de faire 10 000 000 000 instructions à la seconde, ça m'a poussé à faire plus de test (j'avoue que je n'ai aucune notion des capacités de quoi que ce soit).
En faite ça ne venait pas de l'actualisation de mes provinces mais de l'actualisation du menu. A chaque fois qu'une province s'actualisait je disais au code d'actualiser le menu, et c'est ça qu'il n'appréciait pas.

Par contre, j'utilise la fonction Update pour chacune de mes provinces, mais avant ça j'utilisais une liste (contenant toutes mes provinces) avec un script qui actualise chaque élément de la liste tous les premier du mois.
C'est quoi le mieux ? Une manière est meilleure que l'autre ? Une autre manière serait encore mieux ?

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6225
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Optimiser l'actualisation des provinces dans un jeu de grande stratégie.

Message par boubouk50 » 11 Jan 2024 14:11

Il n'y a pas réellement de bonnes ou de mauvaises méthodes, mais plutôt des utilisations adaptées.
Dans ton cas, avec 1000 provinces, avoir un manager qui va dire aux provinces que faire, semble plus adapté dans l'optique de "rendre des comptes" ou de chapeauter.
- Tu pourrais différer les calculs par groupe de 100 sur 10 frames, par ex.
- Une fois toutes les provinces traitées, tu sais quand mettre à jour le menu.
- Si une province doit influer sur d'autre, elle ne fait que demander au manager, et lui se débrouille. Ainsi, une province n'a pas à "connaitre" les autres.
- etc
Mais ce n'est pas forcément la meilleure solution. Elle peut aussi être complémentaire. Le manager chapeaute les provinces, mais chaque province peut également s'autogérer.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
jmhoubre
Messages : 859
Inscription : 05 Oct 2019 22:05

Re: Optimiser l'actualisation des provinces dans un jeu de grande stratégie.

Message par jmhoubre » 12 Jan 2024 00:54

Essaie également de remplacer tes éventuels nombres flottants par des nombres entiers, cela ira plus vite.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6225
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Optimiser l'actualisation des provinces dans un jeu de grande stratégie.

Message par boubouk50 » 12 Jan 2024 09:35

jmhoubre a écrit :
12 Jan 2024 00:54
Essaie également de remplacer tes éventuels nombres flottants par des nombres entiers, cela ira plus vite.
Là, on est quand même dans la 'sur-optimisation' qui n'est utile que si les optimisations basiques sont respectées.
Déjà, un code bien agencé et réfléchi devrait régler tous les problèmes.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Armarius
Messages : 5
Inscription : 08 Jan 2024 18:30

Re: Optimiser l'actualisation des provinces dans un jeu de grande stratégie.

Message par Armarius » 13 Jan 2024 15:13

Merci pour vos conseils !
J'ai modifié mon code et même testé avec 10 000 provinces pour l'expérience et ça fonctionne très bien.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6225
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Optimiser l'actualisation des provinces dans un jeu de grande stratégie.

Message par boubouk50 » 15 Jan 2024 09:44

T'est-il possible de poster ton code pour la postérité ou au minimum d'expliquer ce que tu as fait ? (d'autres membres pourraient avoir le même problème)
Aussi, lorsqu'un problème a trouvé solution, nous demandons à ce que l'auteur du post édite le titre du premier message et ajoute [RESOLU] devant. Cela permet aux autres membres de savoir que ce post donne la solution au problème. Je m'en occupe cette fois-ci ;)
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Répondre

Revenir vers « Scripting »