Verschiedene Koordinaten, die in der Unity3d-Benutzeroberfläche verwendet werden

Warum und wie viele Sorten?


Oft stoße ich auf die Tatsache, dass Leute einfach nicht verstehen, wie man ein Objekt in der Benutzeroberfläche um einen bestimmten Wert verschiebt, und bin überrascht, dass das Ergebnis oft unvorhersehbar ist. Oder lassen Sie uns sagen, wie Sie die richtigen Koordinaten des Objekts in der Benutzeroberfläche erhalten. Wenn wir über den Debugger die übliche Position des Objekts (Position) ableiten, unterscheidet sie sich stark von dem, was wir im Inspektor des UI-Elements sehen. Was sehen wir dort und wie funktioniert es? Infolgedessen werden bisher 100.500 Lösungen aus Foren sortiert, was nicht funktioniert. Ich möchte solchen Prozessen eine sinnvolle Bewegung geben.

Das Wesentliche des Catch ist das Folgende: Die übliche Transformation hat einen Nachkommen von RectTransform, der für die Position und viele Dinge in Bezug auf Größe, Skalierung usw. des UI-Elements verantwortlich ist. Und dank ihm können wir die folgenden Koordinatenoptionen erhalten.

  1. Position
  2. localPosition
  3. verankerte Position (es gibt immer noch verankerte Position3D, aber wir werden es nicht separat betrachten, aber wir gehen davon aus, dass dies eine Unterart von test.anchoredPosition ist



Normale Position


Die normale Position gilt für das UI-Koordinatensystem aus dem Wort überhaupt nicht. Dies sind einige gemeinsame Koordinaten des Objekts in der gesamten Welt der Einheit, und in der Welt gibt es eine bestimmte Darstellung der Position des Objekts, das nicht mit der Schnittstelle verbunden ist. Wenn Sie das Objekt um seine Breite verschieben möchten, funktioniert dies nicht, da die Leinwand Koordinaten in Pixel relativ zum Bildschirm aufweist. Und in globalen Koordinaten sind dies keine Pixel. Daher verschiebt sich das Objekt in der Welt, sagen wir 200 Einheiten der Welt, und nicht 200 Pixel, und fliegt einfach in unbekannte Entfernungen davon. Aber es kann mit Bedacht eingesetzt werden. Ich werde dir später sagen wie.

Ankerposition (verankerte Position)


Was wir im Inspektor sehen, ist was es ist.



In einer Einheit können Sie Ankerpunkte festlegen. Dies ist ein bestimmter Punkt, relativ zu dem das UI-Element positioniert wird, auch wenn die Größe / Proportionen des übergeordneten Objekts geändert werden.



Hier können Sie sehen, dass wir die Größe des übergeordneten Objekts und die Proportionen geändert haben, unser Objekt an der Mitte des übergeordneten Objekts haftet und seine Koordinaten sich nicht geändert haben, obwohl es sich auf dem Bildschirm nicht mehr an derselben Stelle wie zuvor befindet.

Ankerposition - die Koordinaten des Objekts relativ zum Anker. Wir werden in der oberen linken Ecke ankern und sehen, dass sich die Koordinaten geändert haben.



Wenn Sie das Objekt auf seine Breite verschieben möchten, müssen Sie anchororedPosition oder localPosition ändern. Die lokale Position für UI-Elemente wird ebenfalls in Pixel berechnet, jedoch auf andere Weise. Daher, wenn Sie zwei UI-Elemente relativ zueinander bearbeiten müssen. Es ist besser, eine lokale Position zu verwenden. Warum so?

Lokale Position (localPosition)


Was genau ist eine lokale Position:



Dies ist das Koordinatensystem, wenn der Mittelpunkt des übergeordneten Objekts 0 ist. Die obere rechte Ecke ist die positive Breite des in zwei Hälften geteilten Rechtecks. Oben links ist der negative Wert der Breite in zwei Hälften. Das heißt, wenn die rechte Breite 800 Pixel beträgt, dann ist in der Mitte x = 0, oben rechts 400, oben links -400. Wenn Sie die Koordinaten ohne Berücksichtigung von Ankern berechnen müssen, ist es daher besser, lokale Positionen zu verwenden. Vorausgesetzt, sie haben einen gemeinsamen Vorfahren / Rect. Übrigens können Anker nicht nur als bestimmter Punkt auf dem übergeordneten Objekt verwendet werden, sondern auch als Verhältnis zum übergeordneten Objekt. Im zweiten Fall gibt anchororedPosition localPosition zurück.

Warum kann ich die übliche Position für UI-Elemente verwenden? Sagen wir einfach, wenn Sie innerhalb der globalen Koordinaten die Koordinaten der zweiten einem Objekt zuweisen, befinden sie sich unabhängig von ihren Ankern oder lokalen Positionen am selben Punkt. Manchmal ist es praktisch, wenn sich die Elemente auf verschiedenen Zeichenflächen / in verschiedenen Bedienfeldern befinden und das Koordinatensystem lokal / verankert ist nicht übereinstimmen.

Schlussfolgerung / Zusammenfassung


  1. Im Inspektor zeigen die UI-Elemente verankerte Position oder Proportionen relativ zum übergeordneten Element an. AnchoredPosition wird abhängig von der Position des Ankers berücksichtigt
  2. Mit localPosition können Sie die allgemeinen Koordinaten relativ zum übergeordneten Element abrufen, ohne an Anker gebunden zu sein.
  3. Position - Dies ist die globale Position des Elements im Szenenraum, die nicht an die Benutzeroberfläche gebunden ist.


Hoffe jemand hilft :-)

Source: https://habr.com/ru/post/de454246/


All Articles