web-dev-qa-db-fra.com

Comment calculer sizeDelta dans RectTransform?

J'écris un installateur de contenu personnalisé requis pour ma mise en page personnalisée. Donc, je dois contrôler la propriété RectTransform.sizeDelta lorsque les ancres ne sont pas identiques, mais je ne peux pas obtenir qui affiche cette valeur.
Je n’ai pas besoin de API Unity3D référence, je l’ai lue et j’ai un rien car elle dit seulement: 

La taille de ce RectTransform par rapport aux distances entre le ancres. Si les ancres sont ensemble, sizeDelta est identique à size . Si les ancrages sont dans chacun des quatre coins du parent, le sizeDelta est la taille du rectangle par rapport à son parent.

Quelqu'un peut-il expliquer en langage normal ce que cela signifie? Et comment puis-je le calculer manuellement lorsque les ancres ne sont pas identiques?

7
Шах

La définition est un peu déroutante, en effet.

sizeDelta, en gros, renvoie la différence entre le rectangle réel de l'élément d'interface utilisateur et le rectangle défini par les ancres.

Par exemple, dans un rectangle de 300x200:

Ancres au même endroit que les coins du rectangle: sizeDelta est (0,0) enter image description here

Ancres gauche ou droite à la moitié de la largeur du rectangle: sizeDelta est (150,0) enter image description here enter image description here

Les quatre ancres d'un point: sizeDelta est (300,200) (ie: même taille que le rectangle) enter image description here enter image description here

Comme vous pouvez le constater, peu importe le centre du rectangle défini par les ancres se trouve, seule la différence entre la largeur et la hauteur du rectangle de l'élément et du rectangle des ancres est importante.

En pseudo-code, c'est comme ça:

sizeDelta.x = UIElementRectangle.width - AnchorsRectangle.width;
sizeDelta.y = UIElementRectangle.height - AnchorsRectangle.height;

Donc, si le rectangle d’UI a une dimension plus grande que celle des ancres, sizeDelta est positif, si elle est plus petite, sizeDelta est négative.

20
Galandil

sizeDelta: Si vous faites une recherche et que vous vous retrouvez ici pour une explication de ce que sizeDelta signifie, comme GetComponent (). sizeDelta.y, alors videz votre esprit.

Visualisez un petit PANEL reposant sur un grand CANVAS, c'est l'objet Parent . Dans le composant Rect Transform du PANEL, 2 rectangles sont définis:

(a) Le rectangle défini par ses ancres. Ces triangles. Normalement lié à l'emplacement et aux dimensions de l'objet parent, dans ce cas le fichier CANVAS.

(b) Le rectangle défini par sa propre taille, la propre dimension du PANEL.

sizeDelta = (b) - (a)

C'est tout. Parce qu'un composant interactif, tel qu'un bouton, a normalement une taille inférieure à celle de l'objet sur lequel il repose, comme un panneau, et à cause de cela, normalement sizeDelta est une valeur négative. Taille du bouton - Taille du panneau = une valeur négative, normalement . Vous connaissez le terme Espace négatif, utilisé dans la théorie de la conception en général? Pensez-y, comme l'espace NON utilisé par un bouton reposant sur un panneau.

Exemple: Comment trouver la hauteur d'un panneau, c'est-à-dire un enfant d'un canevas superposé à une caméra, donc à la taille de l'écran. Les ancrages du panneau sont liés aux dimensions du canevas. Le script est sur l'objet Panel:

panelHeight = Screen.height + this.GetComponent (). sizeDelta.y;

Rappelez-vous que sizeDelta est normalement négatif, il se lit donc plutôt comme ce pseudo-code:

panelHeight = Screen.height - this.sizeDelta.y

J'espère que cela vous aide, m'a rendu fou pendant un moment. À votre santé!

Références:

https://www.youtube.com/watch?v=VhGxKDIKRvc

https://www.youtube.com/watch?v=FeheZqu85WI

3
Marco António