2012-07-19 78 views
0

我正在Unity3d中编写3D iOS游戏,并且找不到关于为不同设备包含不同纹理大小的完整且直接的答案。首先,我假设一个真正通用的应用程序将需要每个纹理的3个版本......(非视网膜iPhone/iPod的低分辨率,视网膜的低分辨率iPhone/iPod和非视网膜iPad ,现在是iPad的4倍水平)我也假设基于苹果定义的命名约定,下载一个应用程序到特定的设备将只下载适当的纹理。否则,将所有三种分辨率下载到老的非视网膜电话将包含95%的载重量。在通用iOS应用程序中打包多个分辨率

Apple文档链接指出在视网膜设备的纹理文件名以及适用于设备的“〜ipad”或“〜iphone”中使用“@ 2x”。

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

假设1024×1024低资源地图集文件,并按照上面的命名规则,我们现在不得不包括每个图像的四个文件,但其中的两个文件是相同的除了文件名?

如:

(1024 x 1024) myAtlas~iphone.png 
(2048 x 2048) [email protected]~iphone.png 
(2048 x 2048) myAtlas~ipad.png 
(4096 x 4096) [email protected]~ipad.png 

这是正确的吗?

我想我的困惑源于能够轻松使用相同的纹理分辨率为非视网膜iPad和视网膜iPhone/iPods,因为屏幕分辨率是相当相似的,但苹果建议的命名约定似乎并没有利用那个。

这将是我在iOS上首次发布的应用程序,也许我完全错过了一些观点?或者也许我的一些假设是错误的?

回答

1
  1. 是的,命名约定不提供iPhone视网膜和iPad非视网膜共享图像的方式。

  2. 命名约定只适用于UIImage类和相关的API。虽然你可以UIImage/CGImage加载OpenGL ES纹理,绝不是你需要的。无论您想要什么,请命名您的文件,使用类(或相应的GL API)来确定屏幕大小,并使用NSBundle类自己找到合适的纹理文件。 (有关使用PVR纹理文件的一些示例,请参阅Apple示例代码网站。)

  3. 恐怕您关于下载到设备的内容的假设是错误的。您提交给App Store的.ipa捆绑包可以无缝下载到用户安装的任何设备上 - 如果您提交的通用应用程序包含四种不同设备分辨率的资源,则它将与设备上的全部四组资源一起安装,甚至尽管三个未使用。

+0

谢谢rickerster,我开始害怕,可能是这种情况。所以,鉴于Unity可以自动生成一些纹理的mipmap,我真的没有理由包含除最高分辨率以外的任何其他纹理。这似乎对我来说非常直观,迫使低端设备承担额外的重量。 – Adam 2012-07-19 11:29:04