упаковка нескольких разрешений в универсальное приложение для iOS

Я пишу 3D-игру для iOS в Unity3d и не могу найти полный и прямой ответ о включении разных размеров текстур для разных устройств.

Во-первых, я делаю предположение, что для действительно универсального приложения потребуется 3 версии каждой текстуры... (низкое разрешение для iPhone/iPod без сетчатки, 2-кратное разрешение для iPhone/iPod с сетчаткой и iPad без сетчатки, а теперь 4x res для сетчатки iPad) Я также предполагаю, что на основе соглашения об именах, определенного Apple, загрузка приложения на определенное устройство будет загружать только соответствующие текстуры. В противном случае загрузка всех трех разрешений на старый телефон без сетчатки будет содержать 95% мертвого груза.

Связанная документация Apple говорит об использовании «@2x» в имени файла текстуры для устройств с сетчаткой, а также «~ipad» или «~iphone» в зависимости от устройства.

https://developer.apple.com/library/ios/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/SupportingHiResScreens/SupportingHiResScreens.html#//apple_ref/doc/uid/TP40010156-CH15-SW8

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

eg:

(1024 x 1024) myAtlas~iphone.png
(2048 x 2048) myAtlas@2x~iphone.png 
(2048 x 2048) myAtlas~ipad.png 
(4096 x 4096) myAtlas@2x~ipad.png 

Это правильно?

Я предполагаю, что мое замешательство связано с возможностью легко использовать одно и то же разрешение текстуры как для iPad без сетчатки, так и для iPhone / iPod с сетчаткой, поскольку разрешения экрана достаточно схожи, но соглашение об именах, которое предлагает Apple, похоже, не использует это преимущество.

Это будет мое первое опубликованное приложение на iOS, может быть, я что-то совсем упустил? или может какие-то мои предположения неверны?


person Adam    schedule 19.07.2012    source источник


Ответы (1)


  1. Да, соглашение об именах не позволяет iPhone Retina и iPad без Retina обмениваться изображениями.

  2. Соглашение об именах применяется только к классу UIImage и связанному с ним API. Хотя вы можете загружать текстуры OpenGL ES из UIImage/CGImage, это ни в коем случае не требуется. Назовите свои файлы как хотите, используйте класс UIDevice (или соответствующие API GL) для определения размера экрана и самостоятельно найдите подходящие файлы текстур, используя класс NSBundle. (Также см. сайт примеров кода Apple для некоторых примеров использования файлов текстур PVR.)

  3. Боюсь, ваше предположение о том, что загружается на устройство, неверно. Пакет .ipa, который вы отправляете в App Store, загружается без изменений на любое устройство, на котором его устанавливает пользователь. Если вы отправляете универсальное приложение с ресурсами для четырех различных разрешений устройств, оно будет установлено со всеми четырьмя наборами ресурсов на устройстве хотя три остаются неиспользованными.

person rickster    schedule 19.07.2012
comment
Спасибо, Рикстер, я уже начал опасаться, что это может быть так. Итак, учитывая, что Unity может автоматически генерировать MIP-карты для некоторых текстур, у меня нет причин включать какое-либо другое разрешение, кроме самого высокого. Это кажется мне действительно нелогичным, заставляя недорогие устройства нести дополнительный вес. - person Adam; 19.07.2012