Как я могу получить положение экрана элемента пользовательского интерфейса? - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь получить глобальную позицию элемента пользовательского интерфейса.

Я пробовал так много разных способов получить должность, но ни один из них, похоже, не работает. Проблема возникает с якорями, так как я перемещаю их, а не само положение элемента пользовательского интерфейса (для целей разрешения), положение пользовательского интерфейса, отображаемое в инспекторе, всегда равно 0,0,0. Я также пытался заставить anchoredPosition и Corners сделать некоторые вычисления, но они все еще не работают, я всегда получаю (0,0,0) или некоторые несвязные числа.

 Vector3 pointToTravel = Camera.main.WorldToScreenPoint(objectRectTransform.anchoredPosition);

Эта переменная 'pointToTravel' должна содержать положение экрана в пикселях элемента пользовательского интерфейса.

1 Ответ

3 голосов
/ 03 июля 2019

* ** 1 002 1003 * есть

Положение оси этого RectTransform относительно опорной точки привязки.

* * * +10101011 *

Поскольку RectTransform наследуется от Transform, вы можете просто использовать

Vector3 pointToTravel = Camera.main.WorldToScreenPoint(objectRectTransform.position);

, чтобы получить абсолютную позицию в мире.

The position Вы видите в Инспекторе всегда

  • localPosition для Transform - относительно родительского GameObject.

    или

  • anchoredPosition для RectTransform в зависимости от настроек анкерных. - относительно опорной точки привязки

Однако в случае, если ваш холст являетсяScreenspace Overlay весь содержащийся пользовательский интерфейс (или лучше RectTransform s) уже использует координаты экранного пространства в пикселях , поэтому WorldToScreenPoint не требуется, или, лучше сказать, возвращает неправильные значения.

Так что в этом случае вы могли бы просто использовать

Vector3 pointToTravel = objectRectTransform.position;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...