Unity解决包体过大问题记录和纹理相关知识点

Unity解决包体过大问题记录和纹理相关知识点

1.发现问题:

最近我一直在制作一款类似于“保卫胡萝卜”的游戏,其中每个级别都需要更改背景地图。 我已经制作了大约 60 个关卡。 也就是说,项目中有60张比较大的背景图片。

包装尺寸:

检查打包日志:

打开方法:… --> 打开编辑器日志 --> 搜索“Build Report”

从上面的日志可以看出,包体占用的主要大小为:Textures 214.7M,占据包的91.5%;

检查项目中所有纹理所在的文件夹的大小。 总大小小于40M。

根据上面的资源配比,Unity工程中第一张图片的大小确实是8.4M,但是在文件夹中只有340KB。

锁定问题:Unity中图像的大小与文件夹中图像的大小不一致。

2、分析问题:

为什么在文件夹中显示为数百 kb 的图像在 Unity 项目中变成了几兆字节?

经过多方周折,最终确定问题出在项目中设置的图片大小和格式上。

我们先看结论:

当Texture图片拖入时,如下图; Unity会默认设置ToNerestunity 图片压缩格式,这会自动保证Android平台下的图像能被4整除,而IOS平台下的图像是2的整除数,因此默认情况下图像可以获得最好的压缩。

3.解决问题

游戏背景图片是由Sprite构成的,所以使用的纹理类型为:Sprite(2D和UI)音效,如下图: 此时纹理大小为2.6M。

当类型为Default且勾选ToNearest时,大小与文件夹中的图片几乎相同,均为300多KB:

如果你细心的话,你应该注意到,当你选择Sprite(2D和UI)作为Texture Type时,会出现类似下面的警告:

安卓:

只有宽度/高度为 4 倍数的纹理才能压缩为 DXT1 格式

仅具有 4 倍宽度/高度的纹理可以压缩为 DXT1 格式

iOS:

仅 POT 纹理可以压缩为 PVRTC 格式

仅 POT 纹理可以压缩为 PVRTC 格式

事实上,如果当时没有全部选择批量修改,我可能会注意到这个警告并看到文件大小问题; 这样,我就不用等到包装的时候才回去找出是什么原因导致包装变大了。 【还是不够细心……】

解决方案:

使用3D物体+材质球来代替Sprite作为背景,所以不需要改变Texture类型。

修改后

4.相关知识: 4.1纹理导入:

4.2 纹理类型:

以下是纹理检查器窗口中的属性,可用于配置 Unity 中的各种纹理类型

类型名称说明

默认

默认是所有纹理最常用的设置。 此选项可用于访问大多数导入纹理的属性。

法线贴图

法线贴图是一种将颜色通道转换为适合实时法线贴图的格式的格式。

编辑器 GUI 和旧版

当我们想要在 HUD 或 GUI 控件上使用纹理时,请选择此选项。

精灵(2D 和 UI)

当我们想在 2D 游戏中使用它或作为 UI 时,选择此选项以将此纹理用作精灵。

光标

光标是一种使用纹理作为自定义光标的格式。

饼干

当我们需要场景光源的轮廓时选择此选项。

光照贴图

光照贴图是使用纹理作为光照贴图的格式。

单通道

当我们需要单通道纹理时选择此选项。

4.3 平台特定的覆盖纹理压缩格式

虽然Unity支持上面4.1中提到的多种图像格式作为导入纹理的源文件,但在各种平台和设备上都会进行特殊格式压缩。 这些格式针对快速纹理进行了优化,每个平台也有自己不同的专有格式。

默认情况下,Unity 编辑器会自动将纹理转换为与您当前选择的平台相匹配的经过验证的格式。 在大多数平台上,可以选择许多不同的受支持纹理压缩格式。 Unity 为每个平台设置了一些默认格式,但在某些情况下我们可能想要覆盖默认值并为某些纹理选择不同的压缩格式。

要为每个平台应用自定义设置,在纹理的导入配置中,选择 Platform --> Specific overrides 面板来覆盖平台特定的默认设置。如下图:覆盖 IOS 平台

所有支持的纹理压缩格式

下表显示了每个平台上可用的纹理压缩格式选项以及生成的压缩文件大小(基于 256 像素的方形图像)。 选择纹理压缩格式需要在文件大小和质量之间取得平衡; 质量越高,文件越大。 在以下描述中,假设游戏纹理的最终文件大小为256 x 256像素。

纹理压缩格式描述尺寸(256x256像素纹理)平台支持

RGB 压缩 DXT1

压缩的无符号标准化整数 RGB 纹理。

32KB(4 位/像素)

Windows、Linux、macOS、PS4、XBox One、Android(Nvidia Tegra 和 Intel Bay Trail)、WebGL。

RGB 压缩 DXT1

与RGB Compressed DXT1类似,但使用Crunch压缩进行压缩。 有关 Crunch 压缩的更多信息,请参阅上面的注释。

可变的unity 图片压缩格式,取决于纹理中内容的复杂性。

Windows、Linux、macOS、PS4、XBox One、Android(Nvidia Tegra 和 Intel Bay Trail)、WebGL。

RGBA 压缩 DXT5

压缩无符号归一化整数 RGBA 纹理。

8 位/像素。 64KB(8 位/像素)

Windows、Linux、macOS、PS4、XBox One、Android(Nvidia Tegra 和 Intel Bay Trail)、WebGL。

RGBA 压缩 DXT5

与RGBA Compressed DXT5类似,但使用Crunch压缩进行压缩。 有关 Crunch 压缩的更多信息,请参阅上面的注释。

可变的,取决于纹理中内容的复杂性。

Windows、Linux、macOS、PS4、XBox One、Android(Nvidia Tegra 和 Intel Bay Trail)、WebGL。

RGB 压缩 BC6H

压缩无符号浮点/高动态范围 (HDR) RGB 纹理。

64KB(8 位/像素)

Windows Direct3D 11:OpenGL 4、Linux。

RGB(A) 压缩 BC7

高质量压缩无符号归一化整数 RGB 或 RGBA 纹理。

64KB(8 位/像素)

Windows Direct3D 11:OpenGL 4、Linux

RGB 压缩等

压缩 RGB 纹理。 这是 Android 项目中没有 Alpha 通道的纹理的默认纹理压缩格式。

32KB(4 位/像素)

安卓、iOS、tvOS。

RGB 压缩 ETC

与RGB Compressed ETC类似,但采用Crunch压缩方式进行压缩。 有关 Crunch 压缩的更多信息,请参阅上面的注释。

可变的,取决于纹理中内容的复杂性。

安卓、iOS、tvOS。

RGB 压缩 ETC2

压缩 RGB 纹理。

32KB(4 位/像素)

安卓(OpenGL ES 3.0)

RGBA 压缩 ETC2

压缩 RGBA 纹理。 这是 Android 项目中带有 Alpha 通道的纹理的默认纹理压缩格式。

64KB(8 位/像素)

Android (OpenGL ES 3.0)、iOS (OpenGL ES 3.0)、tvOS (OpenGL ES 3.0)

RGBA 压缩 ETC2

与RGBA Compressed ETC2类似,但采用Crunch压缩方式进行压缩。 有关 Crunch 压缩的更多信息,请参阅上面的注释。

可变的,取决于纹理中内容的复杂性。

Android (OpenGL ES 3.0)、iOS (OpenGL ES 3.0)、tvOS (OpenGL ES 3.0)

RGB 压缩 PVRTC 2 位

高度压缩的 RGB 纹理。 质量较低,但较小,从而提高性能。

16KB(2 位/像素)

Android (PowerVR)、iOS、tvOS。

RGBA 压缩 PVRTC 2 位

高度压缩的 RGBA 纹理。 质量较低,但较小,从而提高性能。

16KB(2 位/像素)

Android (PowerVR)、iOS、tvOS。

RGB 压缩 PVRTC 4 位

压缩 RGB 纹理。 高质量纹理,尤其是颜色数据,但可能需要很长时间来压缩。

32KB(4 位/像素)

Android (PowerVR)、iOS、tvOS。

RGBA 压缩 PVRTC 4 位

压缩 RGB 纹理。 高质量纹理,尤其是颜色数据,但可能需要很长时间来压缩。

32KB(4 位/像素)

Android (PowerVR)、iOS、tvOS。

RGB 压缩 ATC

压缩 RGB 纹理。

32KB(4 位/像素)

Android(高通 - Adreno)、iOS、tvOS。

RGBA 压缩 ATC

压缩 RGBA 纹理。

64KB(8 位/像素)

Android(高通 - Adreno)、iOS、tvOS。

RGB 16 位

65,000 种颜色材质材料,无 Alpha。 比压缩格式使用更多内存,但可能更适合没有渐变或清晰纹理的 UI。

128KB(16 位/像素)

所有平台。

RGB 24 位

真实颜色,但没有 Alpha。

192KB(24 位/像素)

所有平台

阿尔法8

高质量 Alpha 通道,但没有颜色。

64KB(8 位/像素)

所有平台。

RGBA 16 位

低质量真彩色。 这是具有 Alpha 通道的纹理的默认压缩格式。

128KB(16位/像素)

所有平台。

RGBA 32位

真彩色,带 Alpha。 这是具有 Alpha 通道的纹理的最高质量压缩格式。

256KB(32位/像素)

所有平台。

PS:Android 上的注意事项

文章来源:https://bbs.huaweicloud.com/blogs/294002