【问题标题】:Unity - compressed .jpg and .png files get uncompressed when building apkUnity - 压缩的 .jpg 和 .png 文件在构建 apk 时被解压缩
【发布时间】:2023-06-15 19:56:01
【问题描述】:

在我的 2d 游戏中,我有大约 20 个背景图片,我已将其转换为 .jpg 文件(编辑:并压缩它们)。它们的总大小约为 9MB,但出于某种原因,当我构建 apk 时,它们未压缩,它们占用了更多空间。 如何预防?谢谢!

编辑:新问题

一些小三角形出现在我的按钮上,仅在游戏中。

这是我在场景中看到的(应该在游戏中看到):

这是我在游戏中看到的(后来添加的圆圈):

为什么会出现这种情况,我该如何解决这个问题?

谢谢

【问题讨论】:

  • 你的mip贴图设置为none了吗?你的背景图片尺寸是多少(1080x1920?)
  • @ErikOverflow 不确定我怎么看? (压缩的)分辨率平均约为 1400*2300。在一些超过 8k 之前。
  • 我可能有你的答案。给我一点时间写出来。
  • 您能否详细说明您是如何压缩它们的,以及使用哪种算法?您是否将 Build Settings > Android 下的“纹理压缩”设置为 ETC2 之类的东西?
  • @Remy_rm 我减少了他们here

标签: android unity3d


【解决方案1】:

您可以在图像的导入设置中覆盖特定构建目标的压缩。在这里您可以设置“最大尺寸”和压缩器质量等内容,您可以稍微调整它们,看看它如何影响您的构建尺寸。

我个人对 android 构建使用以下设置:
最大尺寸:​​m> 2048
调整大小算法: Mitchell
格式: RGBA 压缩 ETC2 8 位
压缩器质量: 正常

除此之外,请确保您在应用程序的构建设置中的 android 构建设置下设置了纹理压缩。将“纹理压缩”设置为 ETC2 (GLES 3.0) 应该会产生最佳效果。

【讨论】:

    【解决方案2】:

    当像素宽度/高度是 2 的幂时,图形的性能最高。性能非常重要,以至于大多数引擎(包括 Unity)会自动将所有纹理缩放到 2 的幂。

    来自 Unity 的 Importing Textures documentation:

    如果平台或 GPU 不支持 NPOT 纹理大小,Unity 会将纹理缩放并填充到下一个 2 的幂大小。此过程会使用更多内存并导致加载速度变慢(尤其是在较旧的移动设备上)。一般来说,您应该只将 NPOT 大小用于 GUI 目的。

    对于某些平台,上述规则会导致 2300x1400 纹理放大到 4096x2048。

    对于 2D 精灵,Sprite Atlases 可以为您提供帮助

    Sprite Atlas documentation:

    Sprite Atlas 是将多个纹理合并为单个组合纹理的资产。

    您可以创建一个主精灵图集,并将其设置为包含在您的构建中。这会将所有纹理打包成一个二次幂纹理。由于 Unity 将在构建中使用 Sprite Atlas 而不是单个纹理,因此它不会将所有原始纹理升级到 2 的幂。因此,您将节省大量空间。注意:您可能需要更改精灵图集中的最大纹理大小,因为您使用的纹理超过 2048。

    【讨论】:

    • 谢谢!看起来对我来说是正确的答案。通过为我的游戏的所有纹理创建精灵图集,apk 大小不是 35MB!这很棒!另一个快速的问题:我看到使用 crunch 压缩有助于减少 apk 大小。但是它会影响之后游戏中纹理的质量吗?非常感谢!
    • 压缩有两种。有损和无损。 Crunch 压缩是有损的,这意味着压缩时数据会“丢失”(因此您的质量可能会略低)。不过,您可能不会看到尺寸减少太多。另外,您的意思是“apk 大小现在是 35MB”吗? @enricortinovis
    • 是的!我设法使用精灵图集将它缩小到 32MB。我还意识到,即使将挤压压缩设置为 50% 也不会产生很大的影响(我正在使用 6.6 英寸的安卓手机)。非常感谢你的帮助!我将为这个答案分配 50 名声望! :)
    • 我现在才注意到它似乎引起了一个小问题。在我的 UI 按钮的左下角,有一些小的彩色三角形。我该如何解决?我编辑了我的答案,这样你就可以看到它们的样子(我也会为此奖励你 50rep)
    • 这可能是“紧密包装”的结果。您可以在精灵图集上禁用此选项,它可能会占用更多空间(最多应该只有几 MB)。精灵图集可能正在旋转并将您的精灵组合在一起,导致一些重叠。 @enricortinovis
    【解决方案3】:

    结帐TinyPng!它将压缩您的图像而不会降低质量。

    【讨论】:

    • 谢谢,但我已经压缩了所有的图像,从总共大约 70MB 到 9MB。问题是,正如我所说,unity 似乎在构建 apk 时解压缩了文件!如何预防?