Assetbundle.Unload(true)解除安裝資源時沒呼叫ScriptableObject的OnDisable

UWATech發表於2024-03-13

1)Assetbundle.Unload(true)解除安裝資源時沒呼叫ScriptableObject的OnDisable
2)Unity VolumeManager中ReplaceData如何最佳化
3)關於使用Addressable的資源放在遠端伺服器後的下載問題
4)Prefab對DLL中指令碼的引用丟失


這是第377篇UWA技術知識分享的推送,精選了UWA社群的熱門話題,涵蓋了UWA問答、社群帖子等技術知識點,助力大家更全面地掌握和學習。

UWA社群主頁:community.uwa4d.com
UWA QQ群:465082844

Memory

Q:最近發現專案中的Mono記憶體佔用一直在增長。專案用的是Addressables來管理資源。

看了下記憶體這塊,發現專案中的Spine資源SkeletonDataAsset.cs分配了一堆記憶體。測試了一下,發現當我呼叫解除安裝介面時,繼承ScriptableObject類的OnDisable並沒有被呼叫到。

現在開始懷疑是不是因為ScriptableObject並沒有被解除安裝乾淨導致。

有人知道這是為什麼導致的嗎?

針對以上問題,有經驗的朋友歡迎轉至社群交流分享:
https://answer.uwa4d.com/question/65e5705040a8d93b624afcf5


Script

Q:請問Unity VolumeManager中ReplaceData怎麼最佳化?為什麼每幀都會更新所有的引數?

A:因為每個相機需要判斷Post是否對自己生效,每個相機執行前需要還原成預設值,否則其他相機的結果會影響到當前相機的判斷結果。不只是每幀執行,是每幀每個相機都會執行一次。

感謝1 9 7 3-311135@UWA問答社群提供了回答


Resource

Q:關於Addressable構建資源在遠端伺服器上下載出錯,打包Android後我將自己的熱更資源放在遠端伺服器上,當我執行APK之後,在已經載入了AOT的Bundle和熱更程式碼的Bundle的情況下,再下載一個144MB的Bundle時報錯,在該檔案目錄下的其它Bundle正常載入。而我使用Addressable的Hosting進行區域網熱更時載入完全沒問題。

錯誤日誌:
OperationException : GroupOperation failed because one of its dependencies failed RemoteProviderException : Unable to load asset bundle from : http://101.132.125.213/ServerDatalAndroid/hotscene_scenes_all_2909c01451a389c3c90a83bbd3eb13b9.bundle UnityWebRequest result : ConnectionError : Unknown Error ResponseCode : 200,Method : GET url : http://101.132.125.213/ServerData/Android/hotscene_scenes_all_2909c01451a389c3c90a83bbd3eb13b9.bundle

載入程式碼:

 public AssetReference hotUpdateMainSceneRef; // 熱更主場景
        private async UniTask _enter_hotfix_main_scene()
        {
            try 
            {

//下載熱更新場景
                var scene = await Addressables.LoadSceneAsync(hotUpdateMainSceneRef);
                // 啟用場景
                await scene.ActivateAsync();
            }
            catch (Exception ex)
            {
                text.text += $"載入熱更場景報錯\n"+ex;
            }


        }

  

檔案目錄:

Assetbundle.Unload(true)解除安裝資源時沒呼叫ScriptableObject的OnDisable

針對以上問題,有經驗的朋友歡迎轉至社群交流分享:
https://answer.uwa4d.com/question/65ec1e5a3625c22cffcb1e4e


Prefab

Q:開發時,不希望策劃看到原始碼,於是將原始碼替換成DLL,但是這樣掛在Prefab上的指令碼引用會丟失,請問怎麼解決?

A:透過反射查詢DLL所有繼承Mono的指令碼,然後建立一個空的派生類繼承那個Mono指令碼,接著把指令碼的Meta的GUID和原始碼裡指令碼保持一致,把所有生成的派生空指令碼和DLL放同一個目錄,只有非程式人拉取即可,我們專案就是這麼弄的。

感謝水岸上@UWA問答社群提供了回答

封面圖來源於網路


今天的分享就到這裡。生有涯而知無涯,在漫漫的開發週期中,我們遇到的問題只是冰山一角,UWA社群願伴你同行,一起探索分享。歡迎更多的開發者加入UWA社群。

UWA官網:www.uwa4d.com
UWA社群:community.uwa4d.com
UWA學堂:edu.uwa4d.com
官方技術QQ群:465082844

相關文章