在通用iOS应用程序中打包多个分辨率
我正在Unity3d上编写3D iOS游戏,并且找不到关于为不同设备包含不同纹理大小的完整和直接的答案。
首先,我假定一个真正的通用应用程序需要每个纹理的3个版本......(非视网膜iPhone / iPod的低分辨率,视网膜iPhone / iPod和非视网膜iPad的2分辨率,现在是4x res视网膜iPad)我还假设,基于苹果定义的命名约定,下载一个应用程序到特定的设备将只下载适当的纹理。 否则,将所有三种分辨率下载到老的非视网膜电话将包含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的res res atlas文件,并遵循上述命名约定,我们现在必须包括每个图像四个文件,但其中两个文件是相同的文件名除外?
例如:
(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使用相同的纹理分辨率,因为屏幕分辨率相当类似,但苹果公司建议的命名约定似乎没有利用这一点。
这将是我在iOS上首次发布的应用程序,也许我完全错过了一些观点? 或者也许我的一些假设是错误的?
是的,命名约定不提供iPhone视网膜和iPad非视网膜共享图像的方式。
命名约定仅适用于UIImage
类和相关的API。 虽然你可以从UIImage
/ CGImage
加载OpenGL ES纹理,但绝不是必须的。 使用UIDevice
类(或相应的GL API)来确定屏幕大小,并使用NSBundle
类自己定位适当的纹理文件。 (有关使用PVR纹理文件的一些示例,另请参阅Apple示例代码网站。)
我担心你对下载到设备的假设是错误的。 您提交给App Store的.ipa
软件包会.ipa
下载到用户安装的任何设备上 - 如果您提交的通用应用程序中包含四种不同设备分辨率的资源,它将在设备上安装所有四组资源即使三个未被使用。