Page 2 sur 2

Re: Optimisation Canvas avec beaucoup d'éléments appli mobile

Publié : 18 Août 2018 19:34
par DevAmat
Je pense que tu dois chercher une autre solution technique. Après tout un nombre est composé de x chiffre(s) de 0 à 9.

Re: Optimisation Canvas avec beaucoup d'éléments appli mobile

Publié : 18 Août 2018 21:43
par Liven
Une solution pour mettre du texte modifiable in game sans passer par l'UI est le composant Text Mesh (à ajouter sur n'importe quel objet).

Le TextMesh Pro est censé remplacer les textes UI et le Text Mesh, mais j'ai jeté un œil vite fait et n'ai pas trouver pour l'aspect hors UI. Cependant je pense qu'une solution à base de TextMech Pro est la plus solide sur le long terme. à toi de creuser.

PS : en cas de problème de flou, joue avec la position z et la taille de caractère

Re: Optimisation Canvas avec beaucoup d'éléments appli mobile

Publié : 18 Août 2018 21:44
par Alesk
Il y a peut-être moyen d'optimiser ton truc.

Combien peut-on voir de nombres au maximum à un instant donné ?

Re: Optimisation Canvas avec beaucoup d'éléments appli mobile

Publié : 18 Août 2018 22:02
par qwerty31
@Liven, merci de l'info, je vais voir si je peux passer là-dessus sans problème...

@Alesk, en gros c'est une quinzaine de nombres visibles en même temps, mais souvent on voit des "portions de nombres" lorsqu'on se déplace sur la grille... Si tu as un moyen ça m'intéresse ;-)

Voilà à quoi ça ressemble durant le jeu en gros :

Image

Re: Optimisation Canvas avec beaucoup d'éléments appli mobile

Publié : 18 Août 2018 22:52
par Alesk
Alors oui, j'ai un moyen.

Avec cette méthode, tu n'auras toujours que les cases des nombres visibles à l'écran, pas plus.
L'idée c'est de pas déplacer la caméra au dessus de ta grille gigantesque, mais de repositionner les cases et de mettre à jour leur contenu pour donner l'impression que c'est bien le cas.
Il faut pour cela avoir un array à deux dimensions qui contient l'état de ta grille globale, et en fonction des coordonnées d'affichage, tu déduis quels nombre sont à afficher et quel est le décalage à donner aux cases affichées pour donner l'illusion d'un déplacement.

Ainsi tu n'auras jamais plus de cases que celle qui tiennent à l'écran en entier ou partiellement.
Je te fais l'explication de mémoire, donc imprécise, mais je sais que ça fonctionne car je l'ai déjà fait ;)

Disons que tu stockes la position d'affichage dans un Vector3 nommé position_camera. Comme tu connais la taille de tes cases, tu peux convertir ça en coordonnées de cases, simplement en arrondissant la position.

Code : Tout sélectionner

int case_x = Mathf.FloortoInt(position_camera.x / taille_case);
int case_y = Mathf.FloortoInt(position_camera.y / taille_case);
maintenant, case_x et case_y sont les index dans l'array 2D de la première case à afficher en haut à gauche de l'écran, mais pas tout à fait... car il faut tenir compte du fait que l'on se réfère à la caméra, qui est centrée, donc il faudrait soustraire avant la moitié de la largeur et de la hauteur de l'écran, converties en worldcoordinates, à position_camera.x et position_camera.y avant de les mettre dans ce calcul... mais ça peut aussi se faire après, avec un décalage que tu règles dans un second temps.

Donc là tu connais les index des cases, tu à juste à faire deux boucles imbriquées pour parcourir l'array 2D afin de chopper les valeurs des cases à afficher, et mettre à jour les valeurs affichées dans tes éléments d'UI (donc juste 4x6 si on se réfère à ton screenshot)

Ensuite, pour simuler le le fait qu'on se déplace graduellement, il suffit de rajouter un décalage à la position du canvas, ce décalage correspond tout simplement à position_camera.x - case_x * taille_case et position_camera.y - case.y * taille_case

Et c'est tout.

à partir de là, tu n'as plus qu'à faire varier position_camera.X et position_camera.y, et tu auras ta grille affichée correctement, et avec uniquement le nombre minimale de cases nécessaires pour remplir l'écran.

A noter aussi que les doubles boucles imbriquées pour mettre à jour le contenu de toutes les cases n'est nécessaire que lorsque case_x ou case_y changent d'un Update à l'autre, donc si tu conserves leurs valeurs dans des variables tampon, ça te permettra d'optimiser encore plus, pour ne faire appel à a phase de mise à jours du contenu des case que lorsque c'est vraiment nécessaire.

Bien entendu, avec cette méthode, aucune donnée du jeu ne peut être associée directement aux cases affichées, il faut tout gérer dans des arrays 2D.

Voilàààà, j'espère que c'est assez clair.

Re: Optimisation Canvas avec beaucoup d'éléments appli mobile

Publié : 19 Août 2018 17:39
par qwerty31
Super, merci beaucoup pour cette solution, je vais essayer de la croiser avec l'utilisation de TextMesh pour tenter d'obtenir un truc le plus optimisé possible. Merci beaucoup à tous, je vais mettre ça en place et je vous tiens au courant ;-)

Re: Optimisation Canvas avec beaucoup d'éléments appli mobile

Publié : 19 Août 2018 20:11
par Alesk
Avec ma méthode, l'utilisation de TextMesh devient superflue... :langue2: