Разные разрешения и масштаб интерфейса
Размер окна, логический дизайн, Canvas Items, Viewport и соотношение сторон.
Разделяйте четыре величины: физический размер окна, логическую область дизайна, разрешение отрисовки корневого viewport и внутренний масштаб 3D. Изменение одной не является универсальным способом увеличить UI, сделать пиксельную графику резче или повысить производительность.
Выберите масштабирование корневого окна
Задайте размер дизайна в Project Settings → Display → Window → Size → Viewport Width / Height. Это базовая область содержимого, а не команда переключить разрешение монитора. Переопределение начального размера окна на ПК — отдельная настройка.
В Display → Window → Stretch выберите режим и политику соотношения сторон. В C# корневой Window доступен через GetTree().Root.
| Режим Stretch | C# ContentScaleMode | Результат |
|---|---|---|
| Disabled | Window.ContentScaleModeEnum.Disabled | Нет растяжения от размера дизайна; остальные настройки окна/масштаба содержимого всё ещё имеют значение. |
| Canvas Items | CanvasItems | Логическое 2D-содержимое масштабируется, а отрисовка идёт в подогнанном размере окна. Подходит для UI и плавной 2D-графики. |
| Viewport | Viewport | Отрисовка в разрешении на основе базового viewport, затем масштабирование готового изображения. Подходит для намеренно фиксированного низкого разрешения. |
Соответствующие свойства: ContentScaleSize, ContentScaleMode, ContentScaleAspect, ContentScaleFactor. Ключи проекта: display/window/size/viewport_width, viewport_height, display/window/stretch/mode, aspect, scale.
Для дизайна 64 × 48 в окне 128 × 96 при factor 1 и Ignore проверенный Viewport даёт корневую текстуру 64 × 48; Canvas Items — 128 × 96 при масштабированном размещении 2D. Это размеры диагностического примера, не рекомендованные разрешения готовой игры.
Решите, что показывать при другом соотношении сторон
| Политика Aspect | Поведение |
|---|---|
| Keep | Сохраняет базовое соотношение; при необходимости добавляет полосы. |
| Expand | Сохраняет масштаб/пропорции, открывая дополнительную логическую ширину или высоту. Содержимое должно заполнять эту область. |
| Keep Width | Сохраняет базовую ширину; на высоком окне открывает больше высоты, в другом направлении при необходимости оставляет полосы. |
| Keep Height | Сохраняет базовую высоту; на широком окне открывает больше ширины, в другом направлении при необходимости оставляет полосы. |
| Ignore | Подгоняет без сохранения пропорций дизайна. Формы могут растягиваться неравномерно. |
В нативной проверке дизайн 64 × 48 в окне 192 × 96 сохраняет логическую область 64 × 48 при Keep, а Expand открывает 96 × 48. Расширенный вид может показать незаполненный фон и объекты за пределами исходной композиции: это задача контента и вёрстки, не поломка рендерера.
Адаптируйте UI вместо масштабирования фиксированных позиций
Используйте Containers для компоновки и anchors/offsets для осмысленной привязки к краям. Проектируйте под минимальную поддерживаемую логическую область, а не только большой монитор разработчика. Проверяйте длинные переводы, прокрутку, размеры шрифтов, зоны нажатия и безопасные области на целевом устройстве. Подгонка пропорций эти задачи не решает.
ContentScaleFactor меняет масштаб всей области содержимого, а не только размер шрифта. В проверенном Canvas Items переход 1 → 2 уменьшает логическую видимую область с 64 × 48 до 32 × 24. Поэтому пользовательская настройка размера UI может потребовать перекомпоновки. Изменение размера дизайна ради крупных кнопок также способно изменить видимую область игры.
Для 3D-игры с чётким UI при необходимости снижайте отдельно разрешение 3D: см. Масштабирование разрешения. Уменьшение всего корневого viewport снижает и разрешение находящегося в нём UI. Разрешение экрана не отменяет проверку кадрирования 3D-камеры на разных пропорциях.
Сохраняйте осмысленную пиксельную графику
Используйте подходящий низкий размер дизайна, Viewport для фиксированного растра и nearest-фильтрацию ассетов, которые должны оставаться пиксельно чёткими. Дробное масштабирование может давать неодинаковую ширину пикселей. Целочисленное увеличение сохраняет целые множители, но может оставлять дополнительные поля или не помещаться в маленькое окно. Ключ настройки — display/window/stretch/scale_mode; integer-режим не гарантирует заполнение каждого окна без полос.
Движение камеры и положение спрайтов всё ещё могут быть субпиксельными. Проверяйте анимацию: чёткий неподвижный спрайт не доказывает стабильную прокрутку. Не переносите правила фильтрации pixel art без разбора на обычный UI и фотографические текстуры.
Не путайте корневой масштаб и SubViewport
У SubViewport свой выходной Size и отдельное переопределение логических координат 2D. Растягивающий SubViewportContainer управляет Size ребёнка; StretchShrink уменьшает его разрешение. Корневой ContentScaleSize не заменяет эти настройки. Исполненный пример ViewportTools и перевод координат ввода разобраны в статье Viewport.
При ручной передаче указателя в масштабированную текстуру учитывайте реальный прямоугольник показа, полосы и переход между логическими и выходными координатами. Простого умножения позиции мыши на отношение разрешений недостаточно без учёта смещений.
Проверяйте случаи, которые выявляют ошибки
| Симптом | Что проверить сначала |
|---|---|
| UI размылся после настройки производительности | Не уменьшен ли весь root viewport вместо только 3D? |
| Круги стали эллипсами | Ignore aspect или отдельно растянутую текстуру. |
| Пустые края на широком экране | Expand показывает больше мира: расширьте фон/компоновку либо выберите другую политику. |
| Элементы уходят за экран | Минимальную логическую область, размеры Containers, anchors и переведённый текст. |
| Нажатия смещены | Полосы/обрезка/масштаб учтены при показе, но не при ручной передаче ввода. |
| Редактор отличается от отдельной игры | Подгонку встроенного игрового окна и реальный размер окна; сравнивайте одинаковые настройки содержимого. |
Нативные проверки этой статьи охватывают пиксели и размеры root Viewport/CanvasItems, ContentScaleFactor и логические области Keep/Expand на Windows Forward+/Vulkan. Качество целочисленного масштабирования в движении, DPI ОС, встраивание, безопасные области мобильных экранов и вся матрица экспортированных устройств требуют отдельных проверок и здесь не объявлены подтверждёнными.