Problème de position dans un canvas unity

Questions à propos du GUI, y compris la partie script.
Quetzal_coatl
Messages : 15
Inscription : 11 Juil 2021 16:58

Problème de position dans un canvas unity

Message par Quetzal_coatl » 19 Oct 2021 21:25

Bonjour,

Je suis face à un problème et je ne trouve aucune solution ou info sur internet. Je viens donc demander votre aide ici :

Je débute sur Unity et je suis entrain de créer un jeu en 2d. Je me suis rendu compte que pour que l'écran s'adapte à la taille de la fenêtre, il fallait utiliser un canvas. J'ai donc mis tout mes éléments dans le canvas, sauf que certains gameObject, que j'appelle "spawners" dans mon projet sont censé faire apparaitre les obstacles et autres éléments, et fonctionnait bien jusqu'à ce que je mette le canvas.

Depuis, quand un spawner fait apparaitre un objet (qui est son enfant) (depuis un préfab) à une position 0, 0 par exemple, l'objet ne se trouve pas à la position du spawner mais à celle du centre de la scène (alors que si j'inscrit manuellement 0, 0 dans l'inspector de l'objet, il va bien à la position du spawner).

Je ne comprend donc pas comment faire pour faire apparaitre mon objet au bon endoit car premièrement, la position 0, 0 à laquelle va l'objet est celle de la scène et ne prend donc pas en compte le canvas (l'objet ne s'adapte donc pas à la fenêtre) et deuxièmement, dans l'inspector, la position 0, 0 de l'objet correspond à celle du spawner (ce qui me parait logique) mais je souhaiterais lui assigner une autre position 0, 0 (dans le canvas) car les différents spawners présent dans mon jeu ne sont pas tous au même endroits (donc pas la même position 0, 0).

En clair je souhaiterais pouvoir modifier la position 0, 0 de l'objet pour que cette position soit la même selon tout les objets (n'ayant pas les même spawners aux mêmes positions) et que cette position 0, 0 soit dans le canvas pour qu elle s'adapte à l'écran.

Faut-il que je détache les objets de leur parent (qui sont leurs spawners attitrés) pour pouvoir le faire ?

je joins une image globale de la scène pour être plus clair :
terrain canvas.JPG
terrain canvas.JPG (61.68 Kio) Consulté 3466 fois
(les spawners dans la scène sont en haut derrière le texte)

Si vous avez besoin d'autres info pour mieux comprendre, demandez les moi (je ne sais pas si je suis très clair dans mon explication :gene: )

Merci beaucoup de vos réponses

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

Re: Problème de position dans un canvas unity

Message par jmhoubre » 19 Oct 2021 23:24

Bonsoir,

un canvas, de ce que j'en sais, ne sert qu'à afficher l'UI (les objets disponibles par Create > UI > ...).
Je ne vois pas trop pourquoi tes objets sont dans le Canvas.
pour que l'écran s'adapte à la taille de la fenêtre
Qu'appelles-tu écran et fenêtre ? Des fenêtres il y en pas mal... L'écran, sans plus de précisions, pour moi c'est le moniteur physique, il ne s'adapte pas.
Pour adapter la surface de ton UI, tu joues sur le composant Canvas Scaler (en général, on choisit "Scale with Screen Size").
Pour adapter la surface affichée de ton jeu, tu joues sur le transform de ta caméra.

Quetzal_coatl
Messages : 15
Inscription : 11 Juil 2021 16:58

Re: Problème de position dans un canvas unity

Message par Quetzal_coatl » 20 Oct 2021 11:20

Pour moi, la fenêtre correspond à l'onglet Game à coté de la Scène, et pour que les gameObject (UI et obstacles) puissent s'adapter selon la taille de cette fenêtre (pour ne pas sortir de la fenêtre quand on modifie sa résolution), je les ai tous mis dans un canvas (en "Scale with Screen Size"). Je n'ai pas pensé à modifier le transform de la caméra car je pensais que tout mettre dans des canvas était la meilleure chose à faire pour plus de simplicité.

Mon seul problème est que lorsque je créée un clone à partir d'un préfab (avec la fonction Instantiate() ), le clone est créée à la position que je lui fournis mais dans la scène en général, et non dans le canvas. Cette position n'est donc cas modifiée par le canvas scaler et est décalé par rapport aux cases. En clair, si je clone un objet en position 0, 0 l'objet n'ira pas au centre du canvas ou au centre de son parent mais au centre de la scène, ce qui me pose problème.

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

Re: Problème de position dans un canvas unity

Message par jmhoubre » 20 Oct 2021 21:34

Comme je l'ai déjà écrit, un canvas ne sert qu'à afficher des éléments d'interface, comme des textes, des boutons, des panneaux, etc...
Les objets de jeu (joueur, obstacles, ennemis, décors, ...) ne devraient pas être dans un canvas (sauf cas particulier que tu ne décris pas).

Imagine que tu filmes ta scène : tu utilises ta caméra en zoomant/dézoomant pour montrer la partie que tu souhaites filmer. La canvas, c'est le générique du film qu'Unity va rendre au-dessus de ton film.

Quetzal_coatl
Messages : 15
Inscription : 11 Juil 2021 16:58

Re: Problème de position dans un canvas unity

Message par Quetzal_coatl » 20 Oct 2021 22:19

Merci, je comprend mieux comment cela fonctionne, sauf que dans mon jeu, il n'y a pas besoin de zoom/dézoom ou de déplacer la caméra car les éléments du jeu sont placés comme des éléments d'interface, (en clair ce n'est pas comme par exemple un jeu de tir où l'inventaire doit être à la même place sur l'écran contrairement aux éléments 3d qui doivent eux bouger lorsque la caméra bouge).

La seule modification est d'adaper la scale de tout les éléments pour qu'ils ne sortent pas de la fenêtre, c'est pour ca que j'ai mis les objets du jeu aussi dans le canvas car, si je ne les met pas dans le canvas, ils pourrait être mal placé (et sortir de la fenêtre) car leur place ne serait pas influencée par la taille de la fenêtre du joueur, de plus, j'aimerais que les objets du jeu aient un système de drag & drop, et je ne trouve pas d'explication sur comment faire sans canvas.

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

Re: Problème de position dans un canvas unity

Message par jmhoubre » 20 Oct 2021 23:56

Pourrais-tu poster quelques screens de la scène et de la fenêtre game, et de la hiérarchie ?

Quetzal_coatl
Messages : 15
Inscription : 11 Juil 2021 16:58

Re: Problème de position dans un canvas unity

Message par Quetzal_coatl » 21 Oct 2021 11:06

Voici la scène :
scene.JPG
scene.JPG (78.04 Kio) Consulté 3338 fois
La hierarchy :
hierarchy.JPG
hierarchy.JPG (35.59 Kio) Consulté 3338 fois
Et la fenêtre game :
game.JPG
game.JPG (65.34 Kio) Consulté 3338 fois

Quetzal_coatl
Messages : 15
Inscription : 11 Juil 2021 16:58

Re: Problème de position dans un canvas unity

Message par Quetzal_coatl » 21 Oct 2021 11:09

(j'envoie un 2nd message car je ne peux pas mettre plus de 3 images)

Voici la scène et la fenêtre game lorsque je change la taille de la fenêtre game :
scene avec résolution différente.JPG
scene avec résolution différente.JPG (36.16 Kio) Consulté 3336 fois
game avec résolution différente.JPG
game avec résolution différente.JPG (47.14 Kio) Consulté 3336 fois
(les obstacles sont placé au même endroit dans la scène que dans les images précédentes, mais vu que la scale du canvas a changée, les obstacles ne sont pas affichés au même endroit qu'avant par rapport aux canvas)

Répondre

Revenir vers « L'interface GUI »