Почему разновидности и сколько их? Я часто сталкиваюсь с тем, что люди просто не понимают, как переместить объект в пользовательском интерфейсе на какое-то значение, и удивляются, что результат зачастую непредсказуем.
Или скажем, как получить правильные координаты объекта в пользовательском интерфейсе.
Если мы отобразим обычное положение объекта через отладчик, оно будет сильно отличаться от того, что мы видим в инспекторе UI-элемента, так что же мы там видим и как это работает? В итоге по форумам ищут 100500 решений, пока одно из них не работает. Я хочу придать таким процессам осмысленное движение.
Суть подвоха в следующем — у обычного Transform есть потомок RectTransform, который отвечает за положение и многие вещи, связанные с размером, масштабом и т. д. UI-элемента.
И благодаря этому мы можем получить следующие варианты координат.
- позиция
- локальная позиция
- anchoredPosition (есть ещеnchoredPosition3D, но мы не будем рассматривать его отдельно, а будем считать подтипом test.anchoredPosition
Обычная позиция
Обычная позиция вообще не относится к системе координат пользовательского интерфейса слова.Это некие общие координаты объекта во всем мире модуля, причем в мире существует некоторое представление положения объекта, не связанное с интерфейсом.
Если вы хотите переместить объект по ширине, это не сработает, так как холст имеет координаты в пикселях относительно экрана.
А в глобальных координатах это не пиксели.
Поэтому объект сместится в мире, скажем, на 200 единиц мирового измерения, а не на 200 пикселей, и просто улетит в неизведанные дали.
Но его можно использовать с умом.
Я расскажу тебе как позже.
Позиция привязки (anchoredPosition)
Что мы видим в инспекторе, то и есть.
В Unity вы можете устанавливать опорные точки; это определенная точка, относительно которой будет располагаться элемент пользовательского интерфейса, в том числе при изменении размера/пропорций родительского объекта.
Здесь вы можете видеть, что мы изменили размер родительского объекта и пропорции, наш объект придерживается центра родительского объекта, а его координаты не изменились, хотя на экране он уже не находится в том же месте, что и раньше.
Позиция якоря – координаты объекта относительно якоря.
Установим привязку в левый верхний угол и увидим, что координаты изменились.
Если вы хотите сдвинуть объект по его ширине, вам нужно изменитьnchoredPosition или localPosition. Локальная позиция элементов пользовательского интерфейса также рассчитывается в пикселях, но другим способом.
Итак, если вам нужно манипулировать двумя элементами пользовательского интерфейса относительно друг друга.
Лучше использовать локальную позицию.
Почему?
Локальная позиция (localPosition)
Итак, что такое местная позиция:Это система координат, в которой центр родительского объекта равен 0. Верхний правый угол — это положительная ширина прямоугольника, разделенная пополам.
Удаляется верхнее левое отрицательное значение ширины.
То есть, если ширина прямоугольника 800 пикселей, то x = 0 в середине, 400 в правом верхнем углу и -400 в левом верхнем углу.
Поэтому, если вам нужно рассчитать координаты без учета якорей, лучше использовать локальные позиции.
При условии, что у них есть общий предок/прямик.
Кстати, якорями можно пользоваться не только как конкретную точку на родительском объекте, но и как пропорции относительно родительского объекта.
Во втором случае,nchoredPosition вернет localPosition.
Почему вы можете использовать обычную позицию для элементов пользовательского интерфейса? Скажем так, в рамках глобальных координат, если одному объекту присвоены координаты второго, то они будут располагаться в одной и той же точке, независимо от их привязок или локальных положений, иногда это удобно - когда элементы находятся на разных холсты/в разных панелях и системы координат локальные/якоря не совпадают.
Заключение/результат
- В инспекторе элементы пользовательского интерфейса показывают привязанную позицию или пропорции относительно родительского объекта.
AnchoredPosition рассчитывается в зависимости от положения якоря.
- localPosition позволяет получить общие координаты относительно родителя без привязки к якорям.
- позиция — это глобальная позиция элемента в пространстве сцены, не привязанная к пользовательскому интерфейсу.
-
Обзор Сервера Thinstation
19 Oct, 24 -
Подкаст Unclesocky - Эпизод №36
19 Oct, 24 -
Хакера Half Life 2 Пытались Заманить В Сша
19 Oct, 24 -
Flickr.com Увеличивает Пространство
19 Oct, 24