Unity Scaling для всех форматов изображения для всех мобильных устройств Android - PullRequest
0 голосов
/ 20 ноября 2018

Я новичок в Unity, и у меня есть эта "проблема".

Я пытаюсь сделать простую 2D-мобильную игру (на данный момент для Android), которая всегда будет в портретном режиме, но мне не удаетсячтобы получить одинаковый результат на всех экранах разных размеров.

Проблема в том, что я пытаюсь сделать экран одинаково масштабируемым на всех экранах разных размеров, но получаю фоновое срезание либо сверху вниз, либовлево-вправо (я знаю, что это связано с Match Width Or Height), когда я пытаюсь изменить размер экрана.

Итак, что я использую в Canvas Scaler: Scale With Screen Size с эталонным разрешением X:1080 Y:1920 и фоновым изображением размером 1080x1920.

Когда я пытаюсь изменить размер экрана до большего разрешения (например, 1080 x 2160):

  • с использованием Shrink фон обрезается

  • с использованием Expand Я получаю "черные полосы".

  • с использованием Match Width Or Height с Match: 1, я получаю "черные полосы" или Match: 0, фонсрез по бокам.

ИЛИ также при изменении размера до меньшего соотношения (3: 4) я получаю либо черные полосы, либо срез фона по бокам.

Всесоотношение 16: 9 (576x1024, 720x1280, 1080x1920, 1440x2560 и т. д.) кажется правильным.

Поэтому мой вопрос заключается в том, каким образом я могу поддерживать все различные размеры экрана мобильного телефона, включая все различные соотношения сторон, без получения моегообрезание фона или получение черных полос по бокам?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Проблема в том, что ваш холст масштабируется до размера экрана, а фон - нет.Размер фонового изображения установлен на 1080x1920.

Я думаю, что самый простой способ сделать это масштабирование (растянуть), это установить изображение, чтобы заполнить родителя (объект холста).

Для этого вы можете установить привязку фонового изображения к этим значениям.Например: Post .

Anchors

    Min  X 0 Y 0

    Max  X 1 Y 1

. Или просто используйте предустановку якоря, чтобы установить эти значения.

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

Но, как сказал @ remy_rm , этот подход растянет ваше фоновое изображение.

0 голосов
/ 20 ноября 2018

Черные полосы / обрезка изображения вызваны тем, что изображение пытается сохранить соотношение сторон из-за использования aspect ratio fitter.

. Отлично работает на 576x1024, 720x1280, 1440x2560 и т. Д.потому что соотношение сторон такое же, как исходное изображение (или холст, который составляет 1080x1920) с соотношением сторон 9:16.

Если вы не хотите получать ни черные полосы, ни часть изображения, являющегося объектомобрезать вам нужно растянуть / обрезать изображение до нового соотношения сторон (например, соотношение сторон 1: 2, если вы хотите 1080x2160)

Чтобы сделать это, вам нужно удалить установщик соотношения сторон,и убедитесь, что preserve aspect отмечен на вашем компоненте изображения.А затем сделать изображение всегда заполнить холст / размер экрана.Например, сделайте GameObject background дочерним элементом вашего холста, добавьте image компонент к background и установите width и height преобразования так же, как Screen.currentResolution (из Screen класс)

Однако это растянет ваше изображение в направлении, в котором оно не соответствует соотношению сторон (если исходное изображение 9:16 (1080x1920) и вы хотите, чтобы оно отображалось 2: 1(2160x1920) растянется в два раза по оси x, что приведет к искаженному и в основном уродливому изображению).Чтобы противостоять этому, вы, вероятно, захотите сделать отдельные изображения для нестандартных форматов изображения или сделать изображение, которое не выглядит плохо при растяжении.

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