1. 程式人生 > >Unity資源載入以及釋放

Unity資源載入以及釋放

1.系統在載入新場景時,所有的記憶體物件都會被自動銷燬,但是不包括assetbundle檔案自身的記憶體映象,因為該assetbundle映象是非託管的。 2.同一個assetsbundle檔案在沒有釋放之前不能重複載入。 3.Destroy 主要用於銷燬克隆的物件,不會自動釋放該物件的所有引用。 4.AssetBundle.Unload(false)釋放AssetBundle檔案記憶體映象。 5.AssetBundle.Unload(true)釋放檔案記憶體映象同事銷燬所有Load的Assets記憶體物件。 6.Resources.UnloadAsset(Ojbect)。釋放非Component元件的資源(如貼圖、音效、材質球等) 7.Resources.UnloadUnusedAssets。釋放所有無引用的資源物件,哪怕有一個引用指向該資源對 象,也無法釋放(如需要釋放的資源為b, Object a = b 因為a引用了b 所以釋放b不成功)。 8.GC.Collect()強制立即釋放無效引用垃圾。固定時間呼叫一次。 9.第一次Instaniate一個Prefab會卡的原因是該Asset物件還未建立在記憶體中,即使你Destroy該物件,但該Asset還存於記憶體中,下次建立會快很多,除非釋放該記憶體物件。 10.AssetsBundle載入資源,會有兩份記憶體的消耗,一份是Assets映象本身,一份的克隆出來的Assets映象,該克隆出來的映象用於反覆多次克隆,但不會消耗額外的第三份記憶體,所以在LoadAssetsBundle的時候根據情況如無需重複克隆該物件最好釋放一下Unload(fasle)該映象本身的記憶體,這樣記憶體中只存在一份這樣的記憶體節省了大量記憶體。 11.PC端本地載入AssetBundle,必須在URL 前 加 "file://",而且 還需要字尾名。 例如,"file://+Application.dataPath+"/test.assetbundle" 12.可通過幾種方法轉換AssetBundle AssetBundle.LoadFromMemory(www.bytes) 將byte陣列同步載入成AssetBundle AssetBundle.loadFromMemoryAsync(www.bytes) 將byte陣列非同步載入成AssetBundle,非同步載入AssetBundle不推薦使用,在yield return等待結束後 返回的結果都可能為還沒載入成功。