Адаптація графіки під різні формати екранів (Aspect Ratio)

Сьогодні Unity-проєкт повинен коректно відображатися на 16:9, 18:9, 19.5:9, 4:3 (iPad), 1:1 (складні пристрої) та 21:9 (ультраширокі монітори). Якщо при проектуванні UI використовували лише Canvas Scaler з Screen Match Mode = Match Width Or Height і magic number 0.5 — на iPad'і UI поїде, на 21:9 — п

Наші компетенції

Інші послуги студії

VR/AR/MR застосунки на замовлення

Вражайте клієнтів і навчайте команду у віртуальній реальності

Розробка ігор на Unity

Від ідеї до релізу — ігри, які запам'ятовуються

3D-моделювання та анімація

Оживимо ваш продукт в об'ємній графіці та анімації

VR-тренажери промислового обладнання

Тренуємо операторів на техніці без ризику і простою

AR-інструкції для виробництва

Покрокові підказки прямо на обладнанні — без паперу

Safety-тренажери

Відпрацювання НС і техніки безпеки без виходу на об'єкт

VR/AR-тренінги

Навчаємо персонал сервісу, адаптації та soft skills у VR

Навчальні вікторини

Перевірка знань у форматі гри — легко і без стресу

Корпоративні відеоінструкції

Зрозумілі ролики для навчання співробітників і клієнтів

Гейміфікація бізнес-процесів

Мотивуємо команду через ігрові механіки в KPI та HR

Застосунки для інфокіосків

Інтерактивні екрани для магазинів, стендів і офісів

VR/AR-інсталяції

Wow-ефект для брендів на виставках, івентах і в шоу-румах

Віртуальні виставки та музеї

Ваша експозиція доступна з будь-якої точки світу — 24/7

Event-квести та брендовані ігри

Незабутні ігри для конференцій та клієнтських івентів

Часті запитання

Останні роботи

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    1504
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    1006
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    635
  • image_games_phoenix_ii_606_0.webp
    3D-анімація – тизер для гри phoenix 2.
    716
  • image_training-quizzes_kids_shopping_quiz_614_0.webp
    Навчальна вікторина для дітей «Покупки в магазині»
    95

Сьогодні Unity-проєкт повинен коректно відображатися на 16:9, 18:9, 19.5:9, 4:3 (iPad), 1:1 (складні пристрої) та 21:9 (ультраширокі монітори). Якщо при проектуванні UI використовували лише Canvas Scaler з Screen Match Mode = Match Width Or Height і magic number 0.5 — на iPad'і UI поїде, на 21:9 — пусті смуги або обрізані елементи.

Ми, команда геймдев-інженерів з 10-річним досвідом (понад 50 проєктів з адаптації графіки), забезпечуємо повну адаптацію: від аудиту UI до впровадження Aspect Ratio Manager. Наша робота гарантує коректне відображення на будь-яких пристроях — від ультрашироких моніторів до мобільних з Dynamic Island. Зв'яжіться з нами для оцінки вашого проєкту.

Чому Canvas Scaler не вирішує проблему?

Canvas з фіксованими розмірами. Кнопка, закріплена по Anchor до правого нижнього кута, при переході з 16:9 на 21:9 спливає за екран — тому що її позиція задана в абсолютних пікселях, а не через Anchors правильно. Це сигнал, що UI спочатку верстався без урахування варіативності співвідношень.

Як працювати з Safe Area на мобільних пристроях?

Safe Area на мобільних пристроях. На iPhone з Dynamic Island і на Android-пристроях з punch-hole камерою верхній кут екрана фізично зайнятий. Якщо статус-бар та ігрові кнопки не враховують Screen.safeArea — UI перекривається вирізом камери. Unity сам не застосовує Safe Area до Canvas — це потрібно робити через скрипт, який зчитує Screen.safeArea і оновлює RectTransform кореневого елемента. Згідно з документацією Unity, Safe Area необхідно обробляти вручну: Safe Area.

Адаптація ортографічної камери під різні співвідношення

Ортографічна ігрова камера з фіксованим Orthographic Size. У 2D-грі з фіксованим Camera.orthographicSize = 5 при переході з 16:9 на 4:3 гравець бачить менше світу по горизонталі. Для платформера це означає, що персонаж не встигає бачити перешкоди. Рішення: розраховуємо Orthographic Size динамічно через цільовий width: orthographicSize = targetWidth / (2 * Camera.aspect).

Як вибрати стратегію: letterbox, pillarbox чи crop?

Три стратегії заповнення неспівпадаючого співвідношення. Для кожної гри — своя. Файтинг на 21:9: pillarbox (смуги з боків) виглядає дивно — краще crop з розширенням арени. Стратегія на iPad: letterbox небажаний — краще показувати більше карти. Вибір стратегії — дизайн-рішення, але його потрібно прийняти явно і реалізувати технічно.

  1. Визначте жанр і цільові пристрої.
  2. Виберіть primary aspect ratio (під нього проектуєте UI).
  3. Для інших співвідношень вирішіть: letterbox, pillarbox чи crop.
  4. Реалізуйте через Camera Viewport Rect або окремі камери.

Практичний підхід: Camera Viewport Rect і Multiple Canvas

Camera Viewport Rect. Для Letterbox/Pillarbox керуємо camera.rect залежно від поточного aspect ratio. Для 21:9 на 16:9-контенті: обчислюємо потрібний Viewport Rect так, щоб ігрова область центрувалася, а смуги малювалися через окрему камеру з Solid Color background.

Multiple Canvas і Reference Resolution. Розділяємо UI на кілька Canvas з різними налаштуваннями масштабування. HUD (здоров'я, міні-карта) — Canvas Scaler Scale With Screen Size, Match = 1 (Match Height). Діалоги та меню — Match = 0 (Match Width). Це дає більш передбачуваний масштаб різних категорій елементів.

З нашої практики: адаптація мобільної стратегії

Мобільна стратегія, реліз на iOS та Android. Розробка велася під iPhone 14 (19.5:9). При тестуванні на iPad Pro (4:3) виявилося: нижня панель ресурсів обрізана знизу, карта світу відображає лише 60% потрібної області, кнопка «Атака» перекрита Safe Area. Рішення зайняло 5 днів: написали AspectRatioManager з трьома профілями (narrow: < 1.6, standard: 1.6–2.0, wide: > 2.0), під кожен профіль — окремі Anchor Preset'и для критичних UI-елементів, плюс Safe Area Controller. Фінальний тест на 7 пристроях з різними співвідношеннями — всі екрани коректні.

Приклад налаштування AspectRatioManager
public class AspectRatioManager : MonoBehaviour { public enum AspectProfile { Narrow, Standard, Wide } private AspectProfile currentProfile; void Update() { float ratio = (float)Screen.width / Screen.height; if (ratio < 1.6f) currentProfile = AspectProfile.Narrow; else if (ratio <= 2.0f) currentProfile = AspectProfile.Standard; else currentProfile = AspectProfile.Wide; ApplyProfile(); } void ApplyProfile() { // Apply anchor presets and camera rect based on profile } } 

Шейдер-рівень адаптації

Shader-рівень адаптації. Для фонових зображень (завантажувальний екран, головне меню) — шейдер з параметром Tiling, який адаптує UVs під поточний aspect ratio. Зображення не тягнеться і не обрізається, а масштабується з розумним кадруванням (аналог CSS object-fit: cover).

Тестування на реальних пристроях

Використовуємо Unity Device Simulator (Window → General → Device Simulator) для попередньої перевірки. Але фінальне тестування — тільки на реальних пристроях: iOS Safe Area в симуляторі розраховується інакше, ніж на фізичному iPhone.

Матриця тестування:

Співвідношення Приклад пристрою Критичні перевірки
4:3 iPad 9th gen HUD, ігрова камера, Safe Area
16:9 Samsung Galaxy S10e Базовий layout
18:9 Pixel 6a Розтягнення UI по вертикалі
19.5:9 iPhone 15 Dynamic Island, Safe Area
21:9 Sony Xperia 1 Letterbox/Pillarbox/Crop

Що входить в роботу

  • Аудит поточного UI зі звітом по проблемах (2–3 дні)
  • Розробка Aspect Ratio Manager з профілями під різні співвідношення
  • Налаштування Safe Area Controller для мобільних пристроїв
  • Оптимізація Anchor Preset'ів та Multiple Canvas
  • Реалізація кастомних шейдерів для фонів
  • Тестування на 7+ реальних пристроях
  • Документація та рекомендації по підтримці

Орієнтовні терміни

Масштаб завдання Терміни
Аудит UI + звіт по проблемах 2–3 дні
Виправлення Safe Area + базовий Aspect Ratio 3–5 днів
Повна адаптація UI під 4+ співвідношення 2–4 тижні
Розробка Aspect Ratio Manager з нуля 1–2 тижні

Вартість розраховується індивідуально залежно від складності проєкту. Економія часу на доопрацювання після релізу може досягати 40% бюджету. Замовте аудит вашого UI або отримайте консультацію — ми оцінимо проєкт безкоштовно.