Unity 4.6 - Как масштабировать элементы GUI до нужного размера для каждой резолюции

Новый Unity 4.6 поставляется с новым графическим интерфейсом, когда я меняю разрешение на Unity, кнопка UI отлично масштабируется, но когда я тестирую устройство Nexus 7, кнопка выглядит слишком маленькой. Любая идея, как это решить?

Unity 4.6

Android - Nexus 7 2Gen

26
задан benLIVE 25 авг. '14 в 3:12
источник поделиться
5 ответов

Новая система GUI Unity использует "привязки" для управления тем, как элементы gui (например, кнопки) масштабируются относительно их родительского контейнера.

Unity имеет обучающее видео о том, как использовать новый компонент "Rect Transform" (где сконфигурированы привязки): http://unity3d.com/learn/tutorials/modules/beginner/ui/rect-transform.

Последняя половина учебника касается якорей. Эта страница содержит ссылки на всю серию учебников. Это не слишком долго. Вы должны смотреть все это.

Специфично для вашего вопроса:

Якоря видны в вашем первом снимке экрана. Это те 4 маленькие стрелки в верхнем левом углу вашей кнопки.

Прямо сейчас ваша кнопка привязана только к верхнему левому углу.

Два правых якоря нужно перетащить вправо, чтобы правый край вашей кнопки был привязан к пространству внутри родительского контейнера.

В зависимости от вашей ситуации две нижние стрелки, возможно, придется перетащить так, чтобы нижний край вашей кнопки также был привязан.

Видео, которое я связал выше, подробно описывает все это.

Наконец, для того, чтобы размер шрифта был хорошо масштабирован для разных разрешений, вам нужно будет добавить и настроить компонент ссылочного разрешения на базовый холст вашего пользовательского интерфейса, как ранее писал Ash-Bash32.

Обновить. Лучший способ добавить компонент Reference Resolution - через окно инспектора для базового холста в пользовательском интерфейсе.

1) нажмите кнопку "Добавить компонентную кнопку" внизу инспектора.

2) введите слово "Ссылка" в поле фильтра поиска.

3) в результатах поиска выберите компонент "Референсное разрешение".

steps to add a reference resolution component in Unity

23
ответ дан schmosef 31 авг. '14 в 9:10
источник поделиться

Референсное разрешение теперь переименовано в Canvas Scaler. Наряду с переименованием они добавили еще много возможностей для динамичности Canvas. Вы можете пройти через Unity Doc of Canvas Scaler, а также ознакомиться с этой статьей для практического примера о том, как и почему использовать Canvas Scaler. Также убедитесь, что вы используете точки привязки для хорошего эффекта, чтобы сделать это более надежным...

21
ответ дан gameOne 15 дек. '14 в 13:23
источник поделиться

Для масштабирования пользовательского интерфейса добавлен компонент ReferenceResolution к холсту, который вы хотите масштабировать. enter image description here

P.S. Theres no Documention for ReferenceResolution

10
ответ дан Ash-Bash32 29 авг. '14 в 14:31
источник поделиться

Если вы хотите, чтобы кнопка была одинакового размера для всех экранов и разрешений, вы должны добавить компонент canvas canvas на холст и установить режим соответствия экрана для: соответствия ширине или высоте, вот ссылка на docs, это очень помогает, если вы хотите стремиться к разным размерам или разрешениям:

http://docs.unity3d.com/Manual/HOWTO-UIMultiResolution.html

2
ответ дан MykeAngel 18 февр. '15 в 20:04
источник поделиться

Это становится гигантским и запутанным после того, как вы начнете прокладывать вещи в коде и использовать масштабирующее устройство для холста, поэтому я хочу дать исчерпывающий ответ, чтобы сохранить кого-то в те часы, в которые я прошел.

Во-первых, не используйте anchoredPosition, чтобы разместить что-либо, если вы не полностью осознаете, что это число от 0.0 до 1.0. Используйте локальное расположение RectTransform, чтобы выполнить фактическую компоновку, и помните об этом в отношении родительского якоря. (Мне пришлось выложить сетку из центра)

Во-вторых, поставьте карандаш для холста на родительский объект макета и внутренние куски ui. Один делает макет в правильном положении, а другой изменяет размеры ваших элементов, чтобы они действительно отображались правильно. Вы не можете полагаться на родителя, если у детей также нет масштабировщиков (и графических Raycasters, чтобы дотронуться до них).

В-третьих, если у вас есть масштабирующее устройство, НЕ используйте Screen.width и height, вместо этого предположите, что на экране есть то же самое значение, что и для масштабирования (надеюсь, вы использовали то же самое или знаете, что делаете). Ширина экрана всегда возвращает фактические пиксели устройства, устройства для сетчатки тоже, но масштабирование холста НЕ учитывает это. Это, вероятно, дает единство единственный способ найти фактический экран, если ваша игра этого хочет. Изменить: этот абзац применяется к любому холсту родителя, связанному с кодом, выполняющим вашу прокладку. Не бродячие холсты, возможно, вы можете их смешивать. Просто помните принципы единства по производительности с холстами.

В-четвертых, холст все еще немного глючит. Даже при работе выше, некоторые вещи не отображаются до тех пор, пока вы не удалите и не заново создадите холст, если вы снова откроете сцену или сработаете. В противном случае вышесказанное представляет собой общие "правила", которые я нашел.

Чтобы центрировать "сетку вещей", вы не можете просто использовать половину ширины или высоты масштабирования холста, вам нужно рассчитать высоту сетки и установить смещение на половину, иначе она всегда будет слегка выкл. Я просто добавил это как дополнительный совет. Этот расчет работает для всех ориентаций.

1
ответ дан Stephen J 10 дек. '16 в 21:25
источник поделиться

Другие вопросы по меткам