Deer_GF之SpriteAtlas與AssetBundle應(yīng)用
Deer_GF之SpriteAtlas與AssetBundle應(yīng)用
最近做出包性能優(yōu)化,發(fā)現(xiàn)框架出包后UI上引用的圖片精靈丟失。于是就想對(duì)這個(gè)Unity UGUI SpriteAtlas一探究竟。
接下來我們開始吧。
目錄
- SpriteAtlas 介紹以及使用
- SpriteAtlas 優(yōu)點(diǎn)
- SpriteAtlas 構(gòu)建assetbundle
- SpriteAtlas 錯(cuò)誤構(gòu)建assetbundle造成的問題匯總以及對(duì)比
一、SpriteAtlas 介紹以及使用
要在Unity中創(chuàng)建一個(gè)新的SpriteAtlas,您可以右鍵單擊項(xiàng)目窗口,然后從上下文菜單中選擇“Create > Sprite Atlas”。然后,您可以將Sprite資源拖放到SpriteAtlas編輯器窗口中,以將它們添加到Atlas中。
創(chuàng)建好SpriteAtlas后,您可以在游戲代碼中引用它來加載和渲染Sprites。您可以使用Unity提供的SpriteAtlas API來做這些事情,其中包括像GetSprite()這樣的函數(shù)來從Atlas檢索特定的Sprite,以及GetSprites()函數(shù)來從Atlas檢索所有Sprites。
二、SpriteAtlas 優(yōu)點(diǎn)
1. 減少繪制調(diào)用次數(shù):SpriteAtlas將多個(gè)Sprite合并成一個(gè)貼圖集合,這樣在渲染時(shí)只需要一次繪制調(diào)用即可,從而大大減少了繪制調(diào)用的數(shù)量。
2. 優(yōu)化GPU資源:由于SpriteAtlas將多個(gè)Sprite合并成一個(gè)貼圖集合,可以減少GPU對(duì)不同材質(zhì)和紋理的切換和緩存開銷,從而提高游戲性能。
3. 簡(jiǎn)化Sprite加載流程:使用SpriteAtlas API可以方便地從貼圖集合中加載Sprites,而無需為每個(gè)Sprite單獨(dú)加載材質(zhì)等資源。
4. 節(jié)省內(nèi)存:由于SpriteAtlas是一個(gè)貼圖集合,它占用的內(nèi)存比單獨(dú)的Sprite要小得多。這對(duì)于需要處理大量Sprite的游戲場(chǎng)景非常重要。
5. 提高游戲性能:由于SpriteAtlas可以減少繪制調(diào)用次數(shù)、優(yōu)化GPU資源、簡(jiǎn)化Sprite加載流程和節(jié)省內(nèi)存,因此可以提高游戲性能,使游戲更順暢。
總之,使用SpriteAtlas可以有效地提高游戲性能,特別是在處理大量Sprite的游戲場(chǎng)景中。
三、SpriteAtlas 構(gòu)建assetbundle

2、把圖集里的精靈圖元打到assetbundle里。
3、生成的圖集不能打到assetbundle,不能打到assetbundle,不能打到assetbundle!筆者因?yàn)橐婚_始對(duì)Unity Ugui圖集概念了解不清楚,造成了assetbundle出包資源圖片不顯示問題!
注意: UGUI的圖集,無論新舊,在構(gòu)建AssetBundle的時(shí)候,同一個(gè)圖集內(nèi)的所有圖元都要放在同一個(gè)AssetBundle中,否則,如果同一個(gè)圖集的圖元被分散到多個(gè)AssetBundle中,那么每一個(gè)AssetBundle都會(huì)包含一份這個(gè)圖集的Copy,最終的結(jié)果就是包體冗余、內(nèi)存膨脹和加載耗時(shí)等問題。
4、筆者因?yàn)橐婚_始對(duì)Unity Ugui圖集概念了解不清楚,造成了assetbundle出包資源圖片不顯示問題!所以做了以下第四部分測(cè)試對(duì)比。敬請(qǐng)往下看??????
四、SpriteAtlas 錯(cuò)誤構(gòu)建assetbundle造成的問題匯總以及對(duì)比
1、內(nèi)存對(duì)比
如下圖1,圖2:
圖1只把圖集構(gòu)建出ab資源,資源內(nèi)存占用138.41MB
圖2只把圖集中的精靈小圖構(gòu)建出ab資源,資源內(nèi)存占用134.58MB
當(dāng)然這樣圖1情況下開啟【Sprite Packer Modes】出包后圖片顯示是不正常的,選擇【Disabled】后顯示是正常的。原因是【Disabled】后每個(gè)預(yù)制體ab資源都單獨(dú)依賴出去一份精靈圖。所以內(nèi)存是增加的!
圖1
圖2
2、DrawCalls 對(duì)比
如下圖1,圖2:
圖1只把圖集中的精靈小圖構(gòu)建出ab資源,刪除圖集,DrawCall到18
圖2只把圖集中的精靈小圖構(gòu)建出ab資源,使用圖集,DrawCall到14
所以,正確使用圖集,可以減少DrawCall
圖1
圖2
3、在使用圖集的情況下,只構(gòu)建精靈小圖,Unity 自動(dòng)最圖集做的處理如下圖1,圖2,圖3,Unity自動(dòng)以文件夾中最后一張圖索引生成一張圖集(前提是一個(gè)文件夾一張圖集測(cè)試)
(圖4,圖5)(圖6,圖7)同此。
圖1
圖2
圖3
圖4
圖5
圖6
圖7
4、在使用圖集的情況下,精靈圖和圖集一起構(gòu)建成assetbundle資源,就沒有3中Unity自動(dòng)生成的圖集,但是這樣同時(shí)出包的資源在構(gòu)建出來的應(yīng)用中使用也是無法正常顯示圖片。如下圖:
圖1
5、ab資源只有精靈圖,刪除圖集和打包成圖集后生成ab后對(duì)精靈圖manifest文件做對(duì)比如下:精靈圖打包成圖集后多了兩個(gè)變量,筆者猜想這兩變量是索引圖集用的。
圖1
寫在最后
一定要正確應(yīng)用UGUI圖集,對(duì)項(xiàng)目性能優(yōu)化很大。稍有不對(duì),就會(huì)造成資源冗余,DrawCall增加,內(nèi)存增大等問題。
在使用中正常大膽的用精靈圖,構(gòu)建assetbundle資源,也只需要構(gòu)建精靈圖。生成的圖集不用管,構(gòu)建資源時(shí)候Unity自動(dòng)會(huì)生成圖集。
UGUI的圖集,無論新舊,在構(gòu)建AssetBundle的時(shí)候,同一個(gè)圖集內(nèi)的所有精靈圖都要放在同一個(gè)AssetBundle中,否則,如果同一個(gè)圖集的圖元被分散到多個(gè)AssetBundle中,那么每一個(gè)AssetBundle都會(huì)包含一份這個(gè)圖集的Copy,最終的結(jié)果就是包體冗余、內(nèi)存膨脹和加載耗時(shí)等問題。
參考博客
本文來自博客園,作者:AlanDu,轉(zhuǎn)載請(qǐng)注明原文鏈接:http://www.rzrgm.cn/AlanDu/p/17253320.html

浙公網(wǎng)安備 33010602011771號(hào)