Разработка игры на Android\iOS (Unity3D 4.3, Cocos2D) — размеры экрана, DPI, масштабирование спрайтов?

Доброго вечер\день\утра коллеги по программированию.

Как хобби проект делаю игру для Android и в перспективе на iOS. Перечитал уже много материалов, но осталось достаточно много вопросов, потому что это совершенно иная сфера для меня.

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

Если я правильно понял, единственный хороший вариант (если не брать в рассчет потребление памяти) - это рисовать спрайты для максимального разрешения и потом масштабировать их относительно разрешения экрана?
То есть если мы нарисовали персонажа 100х80 (WхH), то при базовом разрешении 768х1280 (планшет на Андроид, портрет) он будет в масштабе 1 и выглядит хорошо.
А при разрешении 480х800 (телефон на Андроид, портрет) он будет 62.5х50 (WхH) (пропорциональное уменьшение).

Но это лишь теория :) Для настольных решений все относительно просто - 1024х768 нижняя граница - можно просто поставить разрешение игры 800х600 и все будет просто отлично.

1) Нужно ли учитывать DPI в размерах спрайтов? Или DPI определяет лишь как качественно будут выглядеть спрайты на экране?

2) Как быть с разрешениями экранов? Какой самый идеальный вариант, чтобы игра везде примерно одинаково выглядела? Делать масштабирование или...

3) В Unity3D 4.3 появилась возможность работы с 2D - у камеры есть показатель Size (orthographicSize). Если его менять, то при текущих размерах спрайтов - они уменьшаются, потому что камеры как бы "отдаляется".
Как правильно его использовать наряду с масштабированием спрайтов?

И вообще, может быть кто-то подскажет основы процесса создания игр для мобильных?

Спасибо.
  • Вопрос задан
  • 31060 просмотров
Решения вопроса 2
risik
@risik
Программист
Density и разрешение экрана свзяно друг с другом не совсем прямо пропорционально.

В Android есть такое правило:
LDPI:MDPI:HDPI:XHDPI:XXHDPI=3:4:6:8:12.

например здесь: stackoverflow.com/questions/6166677/android-screen...
или на developer.android.com

То есть, делать персонажа 100 пикселей для xhdpi - очень плохая идея. Лучше, например, 96 пикселей. Так как 96 без остатка делится 6. А высоту не 80, на 78. Тогда размеры персонажа у Вас будут:
LDPI: 48х39
MDPI: 64х52
HDPI: 96х78
XHDPI: 128x104
XHDPI: 192х156

Отсюда можно легко вычислить в каком разрешении Вам надо рисовать персонажа, чтобы избежать не ркатного масштабирования. Находим наименьшее общее кратное между пропорциями. Это будет 24. И рисуем Ваш объект в разрешении 384х312. Из этого размера Вы легко получаете все рисунки всех необходимых размеров. Лучше сделать скрипт, который, например, при помощи ImageMagick масштабирует Ваш оригинальный рисунок и раскладывает по папкам.

То есть, если Вы хотите поддерживать все 5 разрешений, то все Ваши оригинальные рисунки должны иметь размеры, делящиеся на 24 нацело.

Однако, LDPI можно не рассматривать. Тогда пропорции получаются:
MDPI:HDPI:XHDPI:XXHDPI=2:3:4:6.
И в этом случае, очевидно, что все оригинальные рисунки должны иметь размеры, нацело делящиеся на 12. Кстати, даже если Вы оставите поддержку только HDPI и XHDPI Вам все равно нужен множитель 12, а значит Вы дешево получаете поддержку и MDPI и XXHDPI.

Для iOS все чуточку проще. Смотрите комментарий @Lerg.
Ответ написан
Комментировать
Lerg
@Lerg
Defold, Corona, Lua, GameDev
Не знаю как именно обстоит дело в Unity, но я беру спрайты максимального размера под iPad Retina и уменьшая два раза в два раза. Допустип фоновое изображение. Для iPad это будет 2048х1536.
Такой файл я называю background@4x.png, и делаю ещё две версии background@2x.png и background.png, каждый отличается в 2 раза от соседнего. То есть @2x это 1024х768, а простой это 512х368 для устройств с совсем низким разрешением (хотя в настоящее время их можно уже и не поддерживать, это iPhone 3GS, например).

Версия файла выбирается из текущего разрешения устройства, берётся таким образом, чтобы не было артефактов увеличенного масштабирования. То есть для разрешения 1024х600 берутся файлы @2x и уменьшаются по принципу letterbox.

Если говорим о спрайтах и элементах UI, то ничего больше для них не нужно. А вот для фоновых изображений или изображений во всю ширину экрана нужно учитывать ещё разное соотношение сторон.

Если взять фон от iPad и показать его на iPhone 5, то по бокам будут видны незанятые области. Фоновое изображение нужно расширить. Опытным путём я пришёл к разрешению 2776х1536 для @4x, такое изображение покроет полностью экраны всех мобильных устройств.

DPI по хорошему нужно учитывать, иначе на iPad элементы UI получаются гораздо больше чем на iPhone и их можно было бы сделать поменьше, но на практике и без этого нормально в большинстве случаев.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы