Wie berechne sizeDelta in RectTransform?
Schreibe ich einen benutzerdefinierten Inhalten Installateur, der erforderlich ist für mein custom-layout. Also, ich brauche die Kontrolle RectTransform.sizeDelta
- Eigenschaft, wenn die Anker sind nicht gleich, aber ich kann nicht, dass zeigt, dieser Wert.
Ich brauche nicht Unity3D API Referenz, ich Las es und bekam nichts, denn es sagt nur:
Die Größe dieses RectTransform relativ zu den Entfernungen zwischen den
Anker. Wenn die Anker sind zusammen, sizeDelta ist die gleiche wie die Größe.
Wenn die Anker werden in jeder der vier Ecken des Elternteils, der
sizeDelta ist, wie viel größer oder kleiner das Rechteck ist im Vergleich zu
seine Eltern.
Kann mir jemand erklären, in normaler Sprache, was bedeutet es? Und wie kann ich berechnen, es manuell bei Anker sind nicht ein und dasselbe?
InformationsquelleAutor | 2017-06-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die definition ist etwas verwirrend, in der Tat.
sizeDelta
im Grunde gibt die Differenz zwischen der tatsächlichen Rechteck des UI-Elements und des Rechtecks definiert durch die Anker.Beispiel ein Rechteck von der Größe 300x200:
Anker an der gleichen Stelle wie die Ecken des Rechtecks:
sizeDelta
ist (0,0)Linken oder rechten Anker bei der halben Breite des Rechtecks:
sizeDelta
ist (150,0)Alle vier Ankern in einem Punkt:
sizeDelta
ist (300,200) (d.h.: gleiche Größe wie das Rechteck)Wie Sie sehen können, es spielt überhaupt keine Rolle wo der Mittelpunkt des Rechtecks definiert durch die Anker, das einzige, was zählt, ist der Unterschied zwischen der Breite und Höhe des Elements Rechteck und die Anker Rechteck.
In pseudo-code, es ist so:
So, wenn der UI-Rechteck hat eine dimension größer als der Anker",
sizeDelta
ist positiv, wenn es kleiner ist,sizeDelta
negativ ist.Du bist herzlich willkommen. 🙂
also, bedeutet dies, dass:ElementSize=sizeDelta + (anchorMax - anchorMin) ?
die Rechteck-Größe können erhalten werden aus
myRectTransf.rect.size
, die anders sein wird, um die Formel auf Ihre Frage. Auch die, die Sie haben könnten, um es zu skalieren, indemmyRectTransf.localScale
(ich bin nicht sicher über die Skalierung, obwohl).InformationsquelleAutor Galandil
sizeDelta:, Wenn Sie eine Suche, und am Ende hier für eine Erklärung, was sizeDelta bedeutet, wie GetComponent().sizeDelta.y, dann leeren Sie Ihren Geist.
Visualisieren ein kleines PANEL, ruht auf einer großen LEINWAND, es ist Parent-Objekt.
In der SYSTEMSTEUERUNG Rect Transform-Komponente, dort sind 2 Rechtecke definiert:
(a) Das Rechteck definiert durch seinen Anker. Diese Dreiecke. Normalerweise bezogen auf das Übergeordnete Objekt, Lage und Abmessungen, in diesem Fall die LEINWAND.
(b) Das Rechteck definiert durch seine eigene Größe, die PANEL eigene dimension.
sizeDelta = (b) - (a)
Das ist es. Denn normalerweise ist eine interaktive Komponente, wie einen Button, in der Größe kleiner im Vergleich zu dem Objekt, wo es ruht, wie ein Panel, und weil das so ist, normalerweise sizeDelta ist ein negativer Wert. Button-Größe - Panel-Größe = negativer Wert, normalerweise.
Sie kennen den Begriff der Negativen Raum, verwendet in general Design Theorie?
Denken Sie an es, als der Raum NICHT durch eine Taste ruht auf einem Panel.
Beispiel:
Wie man die Höhe eines Felds, das ist ein Kind einer Leinwand, die eine Kamera-overlay, also Bildschirm Größe. Die Anker der Systemsteuerung sind im Zusammenhang mit der Leinwand Maße. Script ist auf das Panel-Objekt:
panelHeight = Screen.Höhe +.GetComponent().sizeDelta.y;
Erinnern, sizeDelta ist normalerweise negativ, so liest es sich mehr wie dieser pseudo-code:
panelHeight = Screen.in der Höhe dieser.sizeDelta.y
Hoffe, dies hilft Ihnen, fuhren Sie mich verrückt für eine Weile. Prost!
Referenzen:
https://www.youtube.com/watch?v=VhGxKDIKRvc
https://www.youtube.com/watch?v=FeheZqu85WI
InformationsquelleAutor Marco António