减少文件大小

Unity 后处理所有导入的资源

Unity 始终后处理导入的文件,因此,在使用多层 psd 文件代替 jpg 储存文件,对将要部署的播放器大小没有任何影响。保存文件为正在使用的格式(例如 .mb 文件、.psd 文件、.tiff文件)将使得工作更加轻松简单。

Unity 剔除未使用的资源

工程文件夹中的资源数量不会影响所构建播放器的大小。Unity 可以非常智能地检测哪些资源已在游戏中使用,而哪些没有使用。Unity 在构建游戏之前会跟踪所有资源的引用,并生成一个需要包含在游戏中的资源列表。因此,可以将未使用的资源安全保存在工程文件夹中。

Unity 输出已使用文件大小的概述

Unity 完成构建播放器之后,将输出概览,说明占据最大文件尺寸的资源类型,它也将输出包含在游戏构建中的资源。只需打开编辑器控制台日志便可查看:单击控制台窗口(窗口 (Window) -> 控制台 (Console))中的打开编辑器日志 (Open Editor Log) 按钮。

文件标题不属于资源,但代表用来维持资源引用和设置的数据,如资源资产。换言之,它是文件中除原始数据内容以外的附加数据。通常,它占据的比例很小,如果数值较大,就应该检查资源 (Resources) 文件夹中是否包含资产。如果是,可以将部分或所有文件移出文件夹。可以切换到使用资源包 (AssetBundles) 以动态加载资源。

优化纹理尺寸

通常纹理会在构建中占用大量空间。首先要做的是在可能的地方压缩纹理格式(DXT(台式机平台)或 PVRTC)。

如果压缩之后纹理尺寸依然没有变小,请试着减少纹理的大小。这里有个技巧:不需要修改实际的源内容,只需在项目视图的导入设置 (Import Settings) 菜单下选择最大纹理尺寸 (Max Texture Size)。这样就可以放大使用此纹理的对象,然后调整最大纹理尺寸 (Max Texture Size),直到对象在场景视图 (Scene View) 中画质变差为止。


更改最大纹理尺寸不会影响纹理资源,它只会影响游戏的分辨率

纹理究竟占用多少内存?

Desktop

压缩内存消耗
RGB Compressed DXT10.5 bpp (bytes/pixel)
RGBA Compressed DXT51 bpp
RGB 16bit2 bpp
RGB 24bit3 bpp
Alpha 8bit1 bpp
RGBA 16bit2 bpp
RGBA 32bit4 bpp

iOS

压缩内存占用
RGB Compressed PVRTC 2 bits0.25 bpp (bytes/pixel)
RGBA Compressed PVRTC 2 bits0.25 bpp
RGB Compressed PVRTC 4 bits0.5 bpp
RGBA Compressed PVRTC 4 bits0.5 bpp
RGB 16bit2 bpp
RGB 24bit3 bpp
Alpha 8bit1 bpp
RGBA 16bit2 bpp
RGBA 32bit4 bpp

Android

压缩内存占用
RGB Compressed DXT10.5 bpp (bytes/pixel)
RGBA Compressed DXT51 bpp
RGB Compressed ETC10.5 bpp
RGB Compressed PVRTC 2 bits0.25 bpp (bytes/pixel)
RGBA Compressed PVRTC 2 bits0.25 bpp
RGB Compressed PVRTC 4 bits0.5 bpp
RGBA Compressed PVRTC 4 bits0.5 bpp
RGB 16bit2 bpp
RGB 24bit3 bpp
Alpha 8bit1 bpp
RGBA 16bit2 bpp
RGBA 32bit4 bpp

纹理总大小:宽 * 高 * bpp。 如果使用 Mipmap 增加 33%。

默认情况下,Unity 会在导入时对纹理进行压缩。为了加速工作,可以在首选项 (Preferences) 中关闭此功能。但在构建游戏时,所有尚未被压缩的纹理都将被重新压缩。

优化网格和动画尺寸

您可以压缩网格和导入的动画片段,以便在游戏文件中占用较小的空间。压缩可以在网格导入设置 (Mesh Import Settings) 中打开。

网格和动画压缩使用量化,这意味着它会占用较小的空间,但压缩可能产生一些误差。应通过实验确定哪个级别的压缩是模型可以接受的。

请注意:网格压缩只会产生较小的数据文件,在运行时不会使用较少内存。动画的关键帧 (Keyframe) 减少可以产生较小的数据文件,在运行时使用较少的内存,一般都应该使用关键帧减少。

此外,您可以选择不把法线和/或切线存储在网格中,这样可以节约运行时在游戏构建和内存中占用的空间。可以在网格导入设置 (Mesh Import Settings) 中的切线空间生成 (Tangent Space Generation) 下拉菜单中进行设置。经验法则:

减少播放器包含的 dll 文件

在构建播放器时(台式机、Android 或 iOS)有一点非常重要,也就是不要依赖 System.dllSystem.Xml.dll。Unity 的播放器安装中不包含 System.dllSystem.Xml.dll。这意味着,如果想要使用 Xml 或 System.dll 中的通用容器,那么必要的 dll 文件将包含在播放器中。这通常使得下载文件大小增加 1mb,这显然无益于播放器的分发,因而应该避免使用。如需解析一些 Xml 文件,可以使用更小的 xml 库,如 Mono.Xml.zip。大多数通用容器都包含在 mscorlib 中,Stack<> 和其他一小部分位于 System.dll。因此,应该尽量避免。


正如所见,Unity 在构建播放器时包含了 System.Xml.dll 和 System.dll。

在播放器分发包中,Unity 包含了如下的 DLL:mscorlib.dllBoo.Lang.dllUnityScript.Lang.dllUnityEngine.dll

Page last updated: 2013-06-29