Когда я вижу, как у новичка кнопка атаки уплывает за край экрана на вытянутом смартфоне, я понимаю: проблема не в «кривом» устройстве, а в том, что UI собирался под одну-единственную картинку. На самом деле адаптация интерфейса — это три простых, но обязательных слоя: масштабирование, привязка к краям и безопасная зона. Если один раз выстроить их правильно, игра будет выглядеть одинаково хорошо и на классическом 16:9, и на безрамочном флагмане с вырезом.
Почему адаптация UI в играх критична
У мобильных устройств нет одного стандартного соотношения сторон. Сегодня в одной аудитории одновременно встречаются 16:9, 18:9, 19.5:9, 20:9 и более экзотические форматы. В студии мы однажды получили десятки негативных отзывов после релиза, потому что на устройствах 19.5:9 кнопка «играть» частично уходила за системную панель. Игроки не могли начать уровень — и это была не косметика, а прямой удар по удержанию. Из-за этого один и тот же интерфейс на разных экранах может:
- обрезаться по краям;
- «уплывать» в центр или в угол;
- выглядеть слишком мелким или слишком крупным;
- перекрывать важные элементы игры;
- попадать под вырез камеры, «чёлку» или системные жестовые зоны.
Для мобильной игры это не косметическая проблема, а часть геймплея. Если кнопка атаки уехала за край, а счётчик валюты лег под системную панель, пользователь воспринимает игру как сырую.
С чего начинается адаптация: базовая логика
Удобно думать об UI в Unity как о трёх слоях — эту ментальную модель я даю стажёрам в первый же день:
- Масштабирование — чтобы интерфейс сохранял читаемость на разных разрешениях.
- Привязка — чтобы элементы оставались на своих местах при изменении формы экрана.
- Безопасная зона — чтобы важные элементы не попадали под вырезы и системные области.
Если игнорировать хотя бы один слой, адаптация будет неполной.
Настройка Canvas Scaler: основа адаптивного UI
Для большинства мобильных проектов в Unity первым делом настраивают Canvas Scaler. Рекомендуемая схема — режим Scale With Screen Size. Unity использует его для масштабирования UI относительно опорного разрешения, чтобы элементы увеличивались или уменьшались вместе с экраном. Я всегда рекомендую именно этот режим, потому что он даёт предсказуемый результат без лишних скриптов. В одном из наших проектов мы выбрали 1920×1080 как эталон — основная аудитория сидела на средних и крупных смартфонах с похожей плотностью пикселей.
Что это даёт
- интерфейс остаётся примерно одного визуального размера на разных устройствах;
- текст и кнопки не становятся микроскопическими на высоком разрешении;
- можно проектировать UI под одну эталонную ширину и высоту.
Как выбрать Reference Resolution
Базовое разрешение нужно выбирать не «красивое», а рабочее — под ваш проект и целевую аудиторию. Для мобильных игр часто берут ориентир в районе 1920×1080, 1280×720 или другой формат, близкий к основному пользовательскому сценарию. Unity прямо использует reference resolution как опорную точку для расчёта масштаба. Не гонитесь за абстрактными цифрами — лучше возьмите то разрешение, в котором вам удобно верстать, и которое покрывает большинство устройств ваших игроков.
Практический совет
Если игра в первую очередь портретная, не стоит проектировать всё под ландшафтный 16:9. Помню, как мы спроектировали портретную головоломку под ландшафтный 16:9 — пришлось переделывать все экраны, потому что на реальных устройствах кнопки сжимались в нечитаемую полоску. Если игра в горизонтальной ориентации, проверяйте поведение UI на более вытянутых форматах, чем 16:9, потому что именно они чаще всего создают проблемы.
Anchors: почему одни кнопки уезжают, а другие нет
Anchors — это не «дополнительная настройка», а главный инструмент стабильного UI. Unity рекомендует привязывать элементы интерфейса к углам и сторонам экрана, чтобы они сохраняли позицию при смене размера окна или устройства. Когда я веду занятия, я прошу новичков представить, что якорь — это гвоздь, которым элемент прибит к определённой точке экрана. Если гвоздь в центре, а вы перетащили кнопку в угол, при смене разрешения она «потянется» обратно к центру.
Простое объяснение
Если элемент привязан к левому верхнему углу, он всегда будет вести себя как элемент левого верхнего угла.
Если он привязан к центру, он будет держаться центра.
Если он растянут по ширине, он может автоматически подстраиваться под доступное пространство.
Что обычно привязывают куда
| Элемент | Логичная привязка | Зачем |
|---|---|---|
| Кнопка «Назад» | Верхний левый угол | Не уезжает и всегда на ожидаемом месте |
| Валюта, счёт, ресурсы | Верхний правый угол | Освобождает центр экрана |
| Основные действия | Нижняя часть экрана | Удобно для большого пальца |
| Центральные окна | Центр | Сохранение симметрии |
| Панель уведомлений | Верх или низ, в зависимости от дизайна | Не конфликтует с игровым полем |
Типичная ошибка
Новички часто ставят элементы визуально «куда надо» в редакторе, но оставляют anchor в центре по умолчанию. У нас был случай, когда стажёр поставил кнопку «пауза» визуально в правый верхний угол, но anchor остался по центру. На планшете кнопка уехала почти в середину экрана — игроки жаловались, что случайно ставят игру на паузу. Проблема не в позиции, а в том, что элемент привязан не к той точке.
Safe Area: обязательная настройка для мобильных экранов
Современные телефоны часто имеют вырезы, закругления и системные панели, из-за которых часть экрана фактически недоступна. Для этого существует safe area — безопасная область, в которой элементы гарантированно видны и не перекрываются системным UI. Unity и Android-практики для крупных экранов прямо рекомендуют учитывать safe area и адаптировать интерфейс под неё. На своих проектах мы обязательно включаем Safe Area уже на этапе прототипа, потому что потом переносить кнопки, которые «залезли» под чёлку, гораздо больнее. Я обычно создаю отдельный Canvas для HUD и применяю к нему скрипт, который автоматически подстраивает отступы под системные области.
Когда safe area особенно важна
- портретные игры с верхними панелями;
- игры с кнопками в углах экрана;
- интерфейсы, где важны кликабельные элементы у краёв;
- устройства с вырезами и необычными пропорциями;
- Android-устройства с экранными жестовыми зонами.
Что нужно помнить
Safe area — это не просто «добавить отступ». Нужно адаптировать интерактивные элементы: кнопки, меню, иконки паузы, элементы HUD. Декоративные слои можно иногда оставить ближе к краям, но всё, по чему пользователь должен нажимать, лучше увести внутрь безопасной области.
Как проверить, что UI действительно адаптивный
Самая частая ошибка — проверка только на одном устройстве или в одном аспекте экрана. Unity рекомендует тестировать UI в Game View на разных соотношениях сторон, например 16:9 и 16:10, чтобы увидеть реальное поведение элементов. В студии у нас есть тестовый парк из нескольких устройств: старенький 16:9, вытянутый 20:9, iPhone с чёлкой и планшет. Но даже без физических устройств можно многое поймать в Game View, если добавить кастомные разрешения.
Минимальный набор проверок
- 16:9;
- 19.5:9 или более вытянутый формат;
- портретный режим, если игра его поддерживает;
- устройство с вырезом;
- экран с маленьким разрешением;
- экран с высоким DPI.
Что проверять визуально
- не обрезаются ли элементы;
- хватает ли места тексту;
- не накладываются ли панели друг на друга;
- остаются ли кликабельные зоны удобными;
- не слишком ли мелкие шрифты;
- не «прыгает» ли верстка при смене ориентации;
- не ломаются ли анимации переходов между экранами.
Пошаговый рабочий процесс для Unity
Шаг 1. Определите приоритетное соотношение сторон
Сначала решите, под что игра проектируется в первую очередь: портрет или горизонталь, а не наоборот. Не пытайтесь угодить всем сразу. Если игра портретная, проектируйте под портрет, а для горизонтальной ориентации делайте отдельную раскладку. Мы так и поступаем: сначала отлаживаем основной режим, а потом адаптируем альтернативный.
Шаг 2. Настройте Canvas Scaler
Поставьте Scale With Screen Size и задайте reference resolution под ваш основной сценарий. Это первое, что я настраиваю в новом проекте, ещё до того, как на сцене появляется первая кнопка.
Шаг 3. Привяжите крупные блоки через anchors
Не двигайте всё вручную. Сразу распределите:
- верхние панели;
- нижние панели;
- боковые кнопки;
- центральные окна;
- всплывающие элементы.
Никакого ручного позиционирования — только якоря и контейнеры.
Шаг 4. Продумайте safe area
Для экранов с вырезами и системными панелями сместите интерактивные элементы внутрь безопасной области. Я добавляю отступы через скрипт, который считывает Screen.safeArea и применяет их к RectTransform’у всего UI. Не откладывайте это на потом — больно переделывать.
Шаг 5. Протестируйте на разных аспектах
Проверьте поведение UI на вытянутых, стандартных и нестандартных форматах, а не только на «удобном» макете. Мы обычно прогоняем три-четыре разрешения, включая самое вытянутое и самое квадратное.
Шаг 6. Исправьте не масштаб, а структуру
Если что-то съезжает, сначала ищите ошибку в anchors, padding, layout group и safe area, а не пытайтесь «дотянуть» всё размерами вручную. В 90% случаев проблема именно в неправильной привязке, а не в абсолютных значениях.
Таблица: что чаще всего ломает интерфейс
| Проблема | Причина | Как исправить |
|---|---|---|
| Кнопка уезжает в сторону | Новичок поставил кнопку в угол, а anchor остался в центре | Привязать к нужному углу или стороне |
| UI слишком мелкий | Canvas Scaler выключен или стоит Constant Pixel Size | Включить Scale With Screen Size |
| Панель попадает под вырез | Safe area не учтён, и кнопка «назад» перекрывается системной навигацией | Ограничить UI безопасной областью |
| Текст не помещается | Жёстко задана широкая кнопка, а после локализации строка стала длиннее | Дать тексту запас, перенести часть контента |
| Интерфейс выглядит «разъехавшимся» | Элементы расставлены вручную без контейнеров и якорей | Пересобрать структуру через контейнеры и якоря |
Полезные принципы для мобильных игр
1. Центр — для важного, края — для служебного
Не перегружайте центр кнопками и статусными панелями. Центр нужен для основного восприятия игры, а края — для интерфейса управления. В казуальных играх мы всегда выносим валюту и настройки в углы, а центр оставляем под игровое поле или персонажа. Это интуитивно понятно и не отвлекает.
2. Одна и та же логика должна работать на разных ориентациях
Если игра поддерживает смену ориентации, интерфейс должен перестраиваться, а не просто уменьшаться. Это особенно важно для меню, инвентаря и экранов настроек. У нас был кейс, когда инвентарь в ландшафтном режиме просто сжимался, а не перестраивался — игроки не могли прочитать названия предметов. Пришлось делать отдельную сетку.
3. Не ставьте всё на абсолютные координаты
Абсолютные значения быстро ломаются на других экранах. Гораздо надёжнее работать через anchors, padding, layout-структуры и safe area. Абсолютные координаты — это как строить дом без фундамента. Я всегда требую от стажёров использовать якоря и layout-группы, даже для, казалось бы, простых меню.
4. Текст всегда проверяйте отдельно
Локализация, длинные названия предметов и системные шрифты могут неожиданно раздвинуть интерфейс. Даже если картинка помещается, текст часто становится узким местом. Мы специально закладываем 30% запаса по ширине под локализацию, и всё равно иногда немецкие или финские слова вылезают.
Типовые ошибки новичков
- Проектирование UI только под один телефон. «Я же на своём проверил, всё ок». Но у пользователя другой экран, и кнопка уезжает.
- Использование фиксированных координат вместо anchors. Ручное позиционирование — гарантированный слом на нестандартном разрешении.
- Игнорирование безопасной области. Кнопки под чёлкой или системными жестами бесят игроков и ведут к удалению.
- Проверка только в редакторе без реальных аспектов экрана. Game View с одним разрешением не покажет всех проблем.
- Размещение слишком многих элементов по углам. На вытянутых экранах углы могут оказаться неудобными для пальцев.
- Попытка компенсировать ошибки верстки уменьшением всего UI. Это не решает проблему, а делает интерфейс нечитаемым.
- Отсутствие запаса под длинные тексты и локализацию. Всегда найдётся язык, где строка окажется в полтора раза длиннее.
Чек-лист перед релизом
Перед отправкой билда я прохожусь по этому списку — он спасал меня не раз:
- Canvas Scaler настроен на Scale With Screen Size.
- Reference Resolution выбрано осознанно.
- Все ключевые элементы имеют правильные anchors.
- Кнопки не попадают под вырезы и системные области.
- UI проверен в нескольких соотношениях сторон.
- Текст не обрезается и не налезает на соседние элементы.
- Элементы управления удобно нажимать большим пальцем.
- Интерфейс читаем на маленьких экранах.
- Нет критичных элементов вне safe area.
FAQ
Нужно ли всегда использовать Canvas Scaler?
Для большинства мобильных игр — да. Это базовый способ сохранить предсказуемый размер интерфейса на разных экранах. Без него ваш UI будет выглядеть по-разному на двух телефонах с одинаковым физическим размером, но разной плотностью пикселей. В 99% проектов я включаю Scale With Screen Size и забываю о проблемах с масштабом.
Что важнее: anchors или Canvas Scaler?
Они решают разные задачи. Canvas Scaler отвечает за общий масштаб, а anchors — за позицию и поведение элементов при смене размеров экрана. Это как спрашивать, что важнее в машине — руль или педали. Работает только вместе. Без любого из них интерфейс развалится.
Можно ли просто сделать один макет под все телефоны?
Нет. Один макет можно использовать как основу, но он должен быть адаптивным: с правильными якорями, масштабированием и учётом safe area. Если вы нарисовали картинку 1920×1080 и жёстко расставили элементы, на вытянутом экране всё сожмётся или растянется. Адаптивность — это не макет, а правила поведения.
Safe area нужна только для iPhone?
Нет. Любой современный смартфон с вырезом, закруглёнными углами или системной навигацией может создать проблемы для кнопок и панелей. Особенно это заметно на Android-устройствах с экранными кнопками навигации — нижняя панель может перекрыть ваши кнопки.
Как понять, что UI уже достаточно адаптирован?
Если интерфейс корректно выглядит на нескольких соотношениях сторон, не обрезается, не перекрывает важные зоны и остаётся удобным для нажатия, значит базовая адаптация сделана правильно. Когда вы открываете игру на трёх разных устройствах и ни разу не морщитесь — работа выполнена.
Вывод
Адаптация интерфейса в Unity — это не «подогнать размеры», а выстроить систему. Сначала задаётся масштаб через Canvas Scaler, затем элементы фиксируются anchors, после этого учитывается safe area и только потом всё тестируется на разных экранах. Если соблюдать эту последовательность, интерфейс будет стабильным, понятным и удобным на большинстве мобильных устройств. Это не финальный штрих, а фундамент, который закладывается с первого дня разработки. Главное — не пытаться «подогнать» размеры вручную, а довериться системе. Тогда 90% проблем уйдут ещё до релиза, а оставшиеся 10% — это уже нюансы локализации и нестандартных разрешений, которые решаются точечно.
