Q1:NGUI的圖集在記憶體裡存了多份,求問怎麼清理?

遊戲運作中,UI Mesh出現多份不同記憶體的情況,是正常的,因為随着UI widget使用的增加或減少,建立的UI Mesh是會随着變化的。同時,如果不同UIPanel中存在相同Atlas的Widgets,則也會出現上圖中的情況。是以,建議大家遇到這種情況時,檢視單幀中NGUI UI Mesh重名的是否有多份重名資源。如果存在,則說明相同Atlas中的資源被多個不同的UIPanel所使用,這種情況是需要盡可能避免的。![]()
技術分享連載(三十一)資源管理資源管理資源管理資源管理資源管理
Q2:Profiler中Not Saved是指什麼?
Profiler中的Not Saved指的是項目中通過代碼生成的各種資源記錄。如上圖所示,其Mesh均為NGUI插件通過腳本生成的UI界面Mesh資源。
Q3:我已經下載下傳了Shader,放到Unity裡了,理應是不會自己引用,可是為什麼還有如下這麼多重複引用呢?
1. Mobile/Particles/Additive
2. Particles/Alpha Blended
3. Mobile/Particles/Alpha Blended
4. Default-Material
我們在Unity5.3.4版本上進行了測試,發現了以下兩種情況: . 對于Standard Shader來說,僅下載下傳Shader确實是關聯不上的。原因是Prefab上還用了Default-Material,這個也是Built-in資源,是以才會出現了Standard Shader的備援問題。. 上圖可以直接看到這兩個資源是同時出現,且均為備援資源。對此,建議開發團隊直接生成一個新的Material來代替Default-Material。 其他Shader關聯不上的原因可能是:新下載下傳Shader的GUID與項目中原始資源關聯的GUID不一緻,如下圖所示。對此,大家需要自行對Meta檔案中的相關GUID進行修改,将原始GUID替換為新下載下傳Shader的GUID。最下方為一個批量處理該類問題的腳本代碼,感謝QQ讨論群中網友wupei的提供!![]()
技術分享連載(三十一)資源管理資源管理資源管理資源管理資源管理 ![]()
技術分享連載(三十一)資源管理資源管理資源管理資源管理資源管理
Q4: 我們測試了下發現,在名為A的MonoBehaviour中,有個數組來存放名為B的 MonoBehaviour對象的引用。當我們其他的邏輯去Destroy了B對象所在的GameObject後,在A對象中的數組裡,周遊列印,它們(B的引用)都為Null,在Inspector面闆上看是missing。而這時候進行GC,堆記憶體其實并未釋放這些B對象。隻有當A對象中的數組被清空後,再調用GC,才可釋放這些對象所占記憶體。這種現象是否正常?為什麼值為Null但卻還是被引用着,無法通過GC釋放呢?
首先這種現象是正常的。這是Unity中對Null的檢測做了特殊的處理所緻,在Unity中MonoBehaviour對象除了存在于Managed Heap中(作為“殼”),在Native記憶體中還會有一個相對應的“實體”,在調用Destroy時,真正被釋放的正是這個“實體”。而在判斷一個MonoBehaviour對象是否為Null時,Unity會首先檢測“實體”是否已經被銷毀,如果是則傳回為true,但此時Managed Heap中的“殼”實際上依然是被引用的,進而就會出現對象的Null判斷為true,但實際上還是被引用着,無法被GC釋放的問題。 相關的細節可見官方blog對Unity中Null判斷的解釋: http://blogs.unity3d.com/2014/05/16/custom-operator-should-we-keep-it/
Q5:Optimize Game Objects對于老版本的Animation系統有沒有作用呢?
沒有作用。Optimize Game Objects功能是Unity4.3版本推出的功能,且僅對Mecanim動畫系統起作用。如果可以的話,建議研發團隊盡可能使用Mecanim來作為項目動畫系統的解決方案。
原文出處:侑虎科技
本文作者:admin
轉載請與作者聯系,同時請務必标明文章原始出處和原文連結及本聲明。