當前位置:
首頁 > 最新 > 技術分享連載|AssetBundle資源冗餘|TraceShape耗時……

技術分享連載|AssetBundle資源冗餘|TraceShape耗時……

我們將從日常技術交流中精選若干個開發相關的問題,建議閱讀時間15分鐘,認真讀完必有收穫。如果您有任何獨到的見解或者發現也歡迎聯繫我們,一起探討。

資源管理

Q:我在Unity 5.5.2下用AssetBundle依賴打包,但是LoadAllAssets之後,內存中卻存在兩份相同的文件。

打包過程如下:將資源A(material)打包到testmaterial.bundle,然後將紋理B打包到testtexture.bundle,再使用一個Sprite C引用紋理B後,將Spirite生成一個Prefab並將其打包到testprefab.bundle。最後導出成的3個Assetbundle之間的依賴關係為:A(testmaterial.bundle)依賴 B(testtexture.bundle),C(testprefab.bundle)依賴B(testtexture.bundle) ,從最後的生成的manifest也可以看出來依賴關係跟預期的一致。

測試內存:我們分別將這個3個AB使用相同的方式在一個空工程中做測試,代碼如下:

然後在Profile查看內存得到的結果,很明顯在內存裡面測試的紋理存在兩份,這是為什麼呢?

A:我們按照提問者的步驟做了下測試,確實在Unity 5.5.2版本中復現了這個問題,可見下圖,mat對應了testmaterial.bundle,texture對應了testtexture.bundle,sprite對應了testprefab.bundle。可見紋理會出現在mat和texture兩個bundle中,且mat也不再依賴於texture(這與manifest中的記錄不符,所以暫估計是Unity的Bug)。

但在Unity 5.3.5中用同樣的方式打包是沒問題的,結果見下圖:

總之,Unity 5.5系列中這種用法確實需要注意了,目前暫時只能通過把mat和texture合并在一個包里來解決。

另外,感謝UWA 問答社區的錢康來補充了以下內容:

我們在使用Unity 5.4的時候,也遇到這個問題,經過反覆測試後發現:如果一個貼圖一方面被當成Sprite使用,另一方面被當成Texture使用(譬如RawImage或者Material),就會斷開引用產生多份。目前解決辦法是保證用Sprite的Prefab及Material打包在一個AssetBundle。

此問答來自於UWA 問答社區:

https://answer.uwa4d.com/question/5927c74052f250573aa862d9

如您對該問題仍有疑問,可以轉至社區進行進一步交流。

UGUI 字體

Q:Unity 5.5版本下的UGUI,我將字體設置為粗體,發現字體只是變寬不加粗,不像正常的粗體,如下圖所示。另外,TestMesh Pro需要預渲染,不能用動態字體,只能用於特定範圍,有像NGUI(效果還不錯)那種對動態字體加粗的方法么?

A:動態字體加粗顯示的外觀是和字體本身有關係的,如果字體中沒有包含「粗體」的字形,那麼Unity會通過拉伸來「模擬」加粗,因此得到的效果是有問題的。而這個行為在UGUI和NGUI中是一樣的。因此,如果要確保加粗顯示正確,則需要使用包含了「粗體」字形的字體,甚至需要考慮是否將其include到發布包中(因為某些設備中的內置字體也有可能被精簡過)。

性能優化

Q:這個紅框裡面的內存是如何生存的?是實例化生成的嗎?但為什麼GameObject被銷毀掉之後,這部分內存也不會被釋放呢?

A:圖中的MonoBehaviour也包含了被載入出來的Prefab上的組件(通過Load介面載入出來的),而這部分組件只能在Prefab被銷毀的時候才會釋放。

UGUI

Q:請問UGUI Image 在切換Sprite(網路圖片) 的時候有卡頓,從Profiler中看到具體卡在SpriteMeshGenerator.TraceShape 這個方法上,如下圖所示,有沒有什麼優化的方法呢?

A:圖中的SpriteMeshGenerator.TraceShape/Decompose/Simplify的函數,通常出現在載入或者創建(Sprite.Create)SpriteMeshType為Tight類型的Sprite時,Tight類型的Sprite在載入或創建時,需要檢測圖片的alpha區域從而生成多邊形。計算量較大,建議將其改為FullRect模式。

性能優化

Q:New出來的Mesh好像都是可讀寫的,在我填充完數據以後,有什麼辦法能把這個Mesh改為只讀么?

A:通過 new Mesh創建的網格可以通過以下介面變為只讀的,從而降低一部分的內存佔用:

https://docs.unity3d.com/ScriptReference/Mesh.UploadMeshData.html

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 侑虎科技 的精彩文章:

Siggraph 2017 相關論文總結

TAG:侑虎科技 |

您可能感興趣

Manga Time Jumbo休刊!《靈感!》等作品移籍連載
Lightroom 學習連載 37——修復邊緣色差
Lightroom學習連載31——校正並美化偏色照片
Lightroom學習連載36——自定義暗角效果
Lightroom 學習連載 19——使用外部預設快速調修照片
Lightroom學習連載55——峽谷美景的調修處理
Lightroom學習連載57——林間小溪美化處理
Lightroom 學習連載 22——校正嚴重曝光不足的照片
《催眠麥克風》傳說中的組合TheDirtyDawg的故事連載
Lightroom學習連載56——晨間海景的綜合調修處理
屬於Air Jordan 1的色彩故事,連載即將開始
thinkphp5連載模板-包含文件
Lightroom學習連載39——提高照片的層次感與清晰度
Lightroom學習連載53——皚皚白雪中的金色故宮
Lightroom學習連載54——林間唯美迷霧水景處理
Lightroom學習連載59——夢幻星空調飾與潤飾處理
Lightroom學習連載29——模擬自定義白平衡拍攝效果
《催眠麥克風》傳說中的組合The Dirty Dawg的故事開始連載!
Lightroom學習連載60——高冷暖對比的繁華夜景
品紅樓  聊攝影連載