0

我正在 Unity3d 中编写一个 3D iOS 游戏,并且找不到关于为不同设备包含不同纹理大小的完整而直接的答案。

首先,我假设一个真正通用的应用程序需要每个纹理的 3 个版本......(非视网膜 iPhone/iPod 的分辨率低,视网膜 iPhone/iPod 和非视网膜 iPad 的分辨率为 2x,现在为 4x res forretina 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 的低分辨率图集文件,并遵循上述命名约定,我们现在必须在每个图像中包含四个文件,但是除了文件名之外,其中两个文件是相同的吗?

例如:

(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 上发布的第一个应用程序,也许我完全错过了一些要点?或者也许我的一些假设是错误的?

4

1 回答 1

1
  1. 是的,命名约定没有为 iPhone Retina 和 iPad 非 Retina 提供共享图像的方法。

  2. 命名约定仅适用于UIImage类和相关 API。虽然您可以UIImage从/加载 OpenGL ES 纹理CGImage,但您绝不需要这样做。随意命名文件,使用UIDevice类(或相应的 GL API)来确定屏幕大小,并使用NSBundle类自己定位适当的纹理文件。(有关使用 PVR 纹理文件的一些示例,另请参阅 Apple 示例代码站点。)

  3. 恐怕您对下载到设备的内容的假设是不正确的。您提交到 App Store的.ipa捆绑软件会原封不动地下载到您的用户安装它的任何设备上——如果您提交的通用应用程序包含四种不同设备分辨率的资源,它会在设备上安装所有四组资源,即使三个闲置。

于 2012-07-19T07:26:05.667 回答