Unity3D_NGUI_安卓APK安装包瘦身实践
減包瘦身是個(gè)精細(xì)活。本文整理了0907版本操作過程,以備日后參考。
?
經(jīng)過一番折騰,各位攻城獅的努力,美術(shù)設(shè)計(jì)師的支持,策劃爺?shù)睦斫?#xff0c;UI資源(圖集、字體、單局外模型貼圖)從45.4MB減少到24.5MB。如下表所示。
?
下文看圖說話。實(shí)操中針對同一個(gè)資源,可組合應(yīng)用多個(gè)壓縮選項(xiàng)。文中所指【圖集Atlas】是多個(gè)小圖片的合集,【Texture】是單張圖片,大小指的都是打包前的資源大小。
?
1、???刪除無效的、廢棄的資源
理由是顯然的,無效的、廢棄的資源就應(yīng)該移除項(xiàng)目工程之外。確認(rèn)是否廢棄資源可以通過以下幾個(gè)方面考量:
Texture:(1)在prefab中搜索texture.png.meta文件的guid,確認(rèn)是否被引用;(2)在C#代碼中搜索文件名,確認(rèn)是否被動(dòng)態(tài)指定。
圖集Atlas:(1)在prefab中搜索atlas.prefab.meta文件的guid,確認(rèn)是否被引用。
圖集Atlas的單個(gè)圖片:(1)在prefab中搜索圖片文件名,確認(rèn)是否被直接引用;(2)在C#代碼中搜索圖片完整或局部文件名,確認(rèn)是否被動(dòng)態(tài)指定。
?
2、???取消圖集Atlas的正方形限制
工程項(xiàng)目中提供了圖集制作工具(HDAtlasMaker),默認(rèn)是生成正方形圖集Atlas。然而此舉很浪費(fèi),因?yàn)槿粝拗茍D集為正方形,很多時(shí)候圖集大部分區(qū)域是空白。事實(shí)上應(yīng)取消正方形限制。
例子(無損):寬*高:2048*2048(16M) =>?1024*2048(8M)
適用場合:去掉正方形限制后可縮減一個(gè)尺寸的Atlas。
?
3、???使用TexturePackerGUI打包,勾選Trim屬性去除透明邊界
例子(無損):寬*高:512*1024(2M) => 512*512(1M)
適用場合:去掉透明邊界后可縮減一個(gè)尺寸的Atlas。
使用TexturePackerGUI工具制作圖集時(shí),可以預(yù)覽圖集效果。勾選Trim屬性的實(shí)質(zhì)是,圖集打包時(shí)設(shè)置Padding屬性代替透明邊界。
?
4、???調(diào)整Texture初始默認(rèn)導(dǎo)入設(shè)置
Texture的默認(rèn)導(dǎo)入設(shè)置包含Mip Maps。然而Mip Maps是為了物體在視野遠(yuǎn)近不同而生成不同分辨率的紋理。而UI貼圖不需要考慮遠(yuǎn)近,無需生成小紋理。所以應(yīng)將Texture導(dǎo)入設(shè)置改用Advanced,并取消Generate Mip Maps。
無損:1.3M => 1.0M
適用場合:默認(rèn)導(dǎo)入設(shè)置為Texture的全部UI圖片資源。
?
5、???調(diào)整Texture導(dǎo)入設(shè)置(Advanced:無Alpha透明通道)
(1)????????????無損:RGBA?32 Bits(2.3MB) => RGB?24 Bits(1.7MB)
適用場合:無Alpha透明通道的單個(gè)圖片,如登陸背景、通用背景。
(2)????????????有損:RGB?24 Bits(1.7MB) => RGB?ETC 4Bits(256KB)
此項(xiàng)壓縮有損畫質(zhì),然而壓縮效果卻很明顯。注意ETC需設(shè)置資源寬高為2冪次方。實(shí)際尺寸非2冪次方時(shí),將以伸縮處理。
適用場合:無Alpha透明通道,且畫質(zhì)要求較低的單個(gè)圖片,如:結(jié)算背景、領(lǐng)獎(jiǎng)背景、通用背景、Loading圖、3D模型貼圖等。
(3)????????????有損:RGB ETC 4Bits &?Max 1024(256KB) => RGB ETC 4Bits &?Max 512(64KB)
在(2)的基礎(chǔ)上,此處設(shè)置寬高最大512,當(dāng)實(shí)際尺寸超過512時(shí)將拉伸到實(shí)際尺寸,會(huì)進(jìn)一步模糊畫質(zhì)。此處512也可根據(jù)實(shí)際情況選用256、128、64、32等。
適用場合:同(2),無Alpha透明通道,且畫質(zhì)要求更低的單個(gè)圖片。
?
6、???調(diào)整Texture導(dǎo)入設(shè)置(Advanced:有Alpha透明通道)
(1)????????????有損:RGBA?32 Bits(1.1MB) => RGBA?16 Bits(0.5MB)
適用場合:有Alpha透明通道,且畫質(zhì)要求較低的單個(gè)圖片。
(2)????????????有損:RGBA 16 Bits &?Max 1024(0.5MB) => RGBA 16 Bits &?Max 512(360KB)
適用場合:同(2),有Alpha透明通道,且畫質(zhì)要求更低的單個(gè)圖片。畫質(zhì)在(2)的基礎(chǔ)上進(jìn)一步模糊。
?
7、???Texture從Atlas分離出來
例子(幾乎無損):寬高:512*512(1M) =>?256*512(0.5M)+ RGBA?16Bits(50KB)
適用場合:分離出尺寸最大的單個(gè)圖片后,剩下小圖片生成的圖集Atlas能縮小一個(gè)尺寸。
?
8、???去掉邊緣發(fā)光
例子(幾乎無損):寬高:640*326(0.8M) => 234*126(115KB)
適用場合:邊緣發(fā)光去掉后對畫質(zhì)不影響或影響甚微的單個(gè)圖片。
?
9、???去掉邊緣裝飾
例子(幾乎無損):寬高:585*141(322KB) => 510*79(157KB)
適用場合:邊緣裝飾去掉后對畫質(zhì)不影響或影響甚微的單個(gè)圖片。
?
10、??????????????整合圖集Atlas
例子(幾乎無損):兩個(gè)256*512(0.5M*2) =>?一個(gè)256*512(0.5M)+若干獨(dú)立小圖
適用場合:圖集小圖片有交集,所屬模塊類似,且都有剩余空間,放一起剛剛好。
?
11、??????????????重新裁切透明邊框尺寸(Atlas)
例子(幾乎無損):512*512(0.5M) => 512*256(256KB)
適用場合: NGUI Font。由于UI Font不能直接Trim,需處理原始資源,切掉透明邊框。
?
12、??????????????重新裁切透明邊框尺寸(Texture)
例子(無損):640*499(0.6M) => 640*450(0.5M)
適用場景:有透明邊框的Texture。由于Texture不能直接Trim,需處理原始資源,切掉透明邊框。
?
13、??????????????縮小資源原始尺寸(Atlas)
例子(有損):寬*高:1024*2048(8M) => 1024*1024(4M)
適用場景:圖集Atlas空白太多,且圖集元素能接受小范圍的畫質(zhì)模糊。
將小圖片縮小80%,重新制作圖集,實(shí)際應(yīng)用UISprite時(shí)再通過代碼恢復(fù)125%回到原始尺寸。
?
14、??????????????縮小資源原始尺寸(Texture)
例子(有損):寬*高:577*1024(1.7M)vs 480*852(1.2M)vs 288*512(432KB)
適用場景:登陸界面背景原始尺寸640*1136。
若直接導(dǎo)入原尺寸,則資源較大(2.1M)。
若按Max 1024導(dǎo)入也不小(1.7M)。
若按Max 512導(dǎo)入則只需432KB,然而此圖為重要門面背景,畫質(zhì)不能忍。又因?yàn)閷?dǎo)入設(shè)置不支持512~1024的中間尺寸,唯有手動(dòng)縮小原始尺寸到合適尺寸和畫質(zhì),比如此處中間版本【原圖66.6% = 480*852(1.2M)】。
?
15、??????????????調(diào)整策劃需求
例子(無損):640*630(1.2M) => 32*32(3KB)
適用場景:特定需求,特定應(yīng)用場景。
項(xiàng)目中的具體需求是,特定時(shí)間區(qū)間內(nèi)顯示運(yùn)營Loading圖,其他時(shí)間顯示默認(rèn)Loading圖。這里可以讓運(yùn)營策劃調(diào)整該特定時(shí)間區(qū)間,使之包含整個(gè)測試期間,那么默認(rèn)Loading圖就無需顯示,其導(dǎo)入尺寸可縮小到最小。此處不直接刪除默認(rèn)Loading圖是為了避免邏輯出錯(cuò),且方便日后恢復(fù)。
?
16、??????????????統(tǒng)一背景資源
例子:背景大圖。
背景大圖等資源應(yīng)盡量復(fù)用。以下曾經(jīng)出現(xiàn)過的幾個(gè)背景圖差異微小,經(jīng)商討后,最終統(tǒng)一用第三個(gè),刪除另外兩個(gè)。
?
17、??????????????縮減關(guān)鍵圖集Atlas尺寸
例子:Common圖集Atlas把ABCS品質(zhì)獨(dú)立出來,剩下打包更小尺寸的Atlas。關(guān)鍵圖集出現(xiàn)概率很高,此處縮減操作是為內(nèi)存考慮。
?
18、??????????????分析構(gòu)建日志
例子:分析C:\Users\[你的用戶名]\AppData\Local\Unity\Editor\Editor.log當(dāng)中的構(gòu)建日志部分,查看打包資源列表,發(fā)現(xiàn):
(1)NGUI樣例圖集被打包進(jìn)去了。
搜索發(fā)現(xiàn)并無被直接引用,而是間接引用。為防止出錯(cuò)不直接刪除,而是將Max Size調(diào)整到很小。
(2)發(fā)現(xiàn)了重復(fù)圖集。
(3)寵物圖集占用5.3MB,而不是4.0MB,經(jīng)檢查發(fā)現(xiàn)導(dǎo)入設(shè)置有誤,生成了Mip Maps。類似的大圖集有好幾個(gè),逐一檢查處理。
(4)新手引導(dǎo)和頭像集合這兩個(gè)圖集很大,進(jìn)一步將重點(diǎn)優(yōu)化。
總結(jié)
以上是生活随笔為你收集整理的Unity3D_NGUI_安卓APK安装包瘦身实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浦发银行信用卡激活有效期是多久?不激活有
- 下一篇: Unity3D之Shader自定义编辑器