J'ai parcouru la documentation sur la fonction Tilemap d'Unity 2017.2.
Unity limite-t-il le nombre maximal de tuiles qu'il prendra en charge pour un maillage de tilemap particulier?
Je sais que chaque mosaïque est instanciée une fois et utilisée pour texturer les quads sur le maillage Tilemap au moment de l'exécution, donc je suppose que la limite du nombre de quads du maillage dépend en fin de compte du matériel, et plus ou moins est arbitrairement élevée.
Est-ce une hypothèse correcte ou y a-t-il un bouchon dur dans le moteur?
Réponses:
Votre RAM est votre limite .
Les tests suivants ont été effectués sur un système avec ces spécifications:
Voici un script que j'ai exécuté qui développe un tilemap en le remplissant avec une seule tuile (32x32 pixels). La méthode
Grow()
ajoute une autre colonne et une autre ligne à la carte actuelle. La méthode est appelée 100 fois à chaque mise à jour.Après quelques minutes, mon ordinateur a manqué de mémoire et Unity s'est écrasé. À ce stade, il était de 8400 x 8400 (70 millions) de tuiles et Unity.exe consommait légèrement plus de 11 Go de RAM selon le gestionnaire de tâches.
Eh bien, mais qu'en est-il clairsemé cartes ?
Voici un script différent qui a placé une seule tuile en augmentant les coordonnées x et y par incréments de 100 tuiles:
L'empreinte mémoire d'Unity.exe a en fait très peu augmenté, ce qui laisse entendre que les cellules de jeu de tuiles vides ne nécessitent presque pas de RAM. Cependant, le FPS a continué de baisser au fur et à mesure que le jeu de tuiles grandissait. Il a atteint 60 Fps à 30000x30000, 30 Fps à 60000x60000 et 15 Fps à 90000x90000. Les Fps sont restés aussi bas lorsque j'ai supprimé le script pendant le test. Ce ralentissement n'était donc pas dû à la modification du tilemap. C'était simplement en le rendant. Donc, lorsque vous souhaitez créer un jeu de monde ouvert vraiment énorme, vous devrez peut-être utiliser plusieurs petits tilemaps que vous créez et détruisez au moment de l'exécution.
Conclusions: les tilemaps énormes mais surtout vides n'utilisent pas beaucoup de RAM, mais ils sont un goulot d'étranglement pour le rendu , même lorsque la plupart d'entre eux ne sont pas dans la fenêtre de la caméra.
J'ai ensuite expérimenté ce script qui génère des tilemaps avec une taille donnée:
J'ai utilisé ce script pour générer une carte 8192x8192. Cela a pris quelques minutes, mais lorsque le script a été terminé, il a fonctionné à 95 Fps.
Conclusion: des cartes avec des millions de tuiles sont réalisables, du moins sur les PC de jeu .
la source
Update
méthode lors de la génération, le jeu et l'éditeur Unity se figent jusqu'à la fin de la génération. Si vous voulez que votre jeu soit réactif pendant la génération de carte, déplacez la génération vers une coroutine qui génère un morceau à la fois et donne entre eux.