![]()
這是第438篇UWA技術知識分享的推送,精選了UWA社區(qū)的熱門話題,涵蓋了UWA問答、社區(qū)帖子等技術知識點,助力大家更全面地掌握和學習。
UWA社區(qū)主頁:community.uwa4d.com
本期目錄:
- UnityEngine.Object在失去引用后用什么方法銷毀或回收
- 關于紋理采樣方式對帶寬的影響原理的問題
- 微信小游戲緩存catalog.json文件的方案
- 微信小游戲的幀率設置用哪個更好
Memory
Q:UnityEngine.Object在失去引用后,是一定要調(diào)用Destroy進行銷毀么?不會被GC自動回收么?
A:UnityEngine.Object是一種基類,題主的問題比較大。常見的有三種情況:
1. C# 的托管堆內(nèi)存在失去引用后,會在GC后被自動回收;
2. 從AssetBundle中被加載出來的資源,需要用AssetBundle.Unload(True)這類的API定向卸載,或在失去引用后被Resources.UnloadUnusedAssets標記并卸載;
3. 還有一種動態(tài)創(chuàng)建的對象,如通過new、instantiate生成的資源,則需要手動Destroy,或在失去引用后被Resources.UnloadUnusedAssets標記并卸載。
針對以上問題,有經(jīng)驗的朋友歡迎轉至社區(qū)交流:
https://answer.uwa4d.com/question/686b545d682c7e5cd61bfaba
GPU
Q1:想問下關于紋理采樣的消耗這塊,有沒有一些相關的經(jīng)驗可以分享?
從Mali的文檔上看,Cache Hit的情況下是1cycle采樣1紋素,Cache Miss的情況下需要100-200cycle。
那么如果觸發(fā)Cache Miss,是從當前采樣UV位置的附近的2*2讀取到Tex Cache上,還是直接讀取L1大小的數(shù)據(jù)上去。比如Adreno有1KB的L1?
A: 從Onchip到L1不是固定的2*2,也不是整個L1;根據(jù)GPU型號不同,有一個固定的每次取的大小,紋理壓縮率越低、單個像素信息量越大,每次能取的像素數(shù)量就會更少,Cache Miss率就更高,此時就會往更遠的L1、L2去取。
Q2:那是按1維去取n個像素,還是二維去取m*m個像素?想了解下怎么樣擺放數(shù)據(jù)能Cache友好些。
A: 應該是m*m。一般只要開啟Mipmap,交由GPU自動選擇合適的層級,就能使像素的采集過渡平滑友好,Cache Miss率較低了。此外就是盡量壓縮紋理格式、避免使用各向異性這種大幅增加采樣次數(shù)的做法,也能有效降低帶寬。
針對以上問題,有經(jīng)驗的朋友歡迎轉至社區(qū)交流:
https://answer.uwa4d.com/question/687476f2682c7e5cd61bfabf
Memory
Q:現(xiàn)在我們不能緩存catalog,每次需要臨時下載還挺麻煩的。APP的Addressables熱更的方案就是先去線上請求catalog.hash文件,然后判斷本地的catalog文件是不是舊的,舊的就刪除掉本地的catalog文件,然后下載新的。但是在微信小游戲會一直請求catalog,所以我們每次進入游戲都要下載catalog文件。請問微信小游戲該如何緩存catalog.json文件呢?
A:我的方案是自定義了catalog1000、settings1000文件,加上版本號,相當于是自己改了settings文件里面的catalog URL,然后改了catalog文件名,也改了Addressables的源碼,取到版本號后去讀取指定的settings文件,這樣settings文件也可以緩存了。
我的方式是catalog和settings都自定義成了下面這樣:
然后settings文件的這一句話改成了我指定的catalog1000:
"m_InternalId":"{UnityEngine.AddressableAssets.Addressables.RuntimePath}/catalog1000.bundle"再改了個Addressables的源碼,Addressables在初始化的時候會去找settings文件:
![]()
然后就是走微信小游戲自己的規(guī)則了,即本地有就讀取本地,本地沒有下載緩存。catalog和settings都加了版本號,也不怕settings同名或cdn緩存問題。
針對以上問題,有經(jīng)驗的朋友歡迎轉至社區(qū)交流:
https://answer.uwa4d.com/question/687482d6682c7e5cd61bfac0
Platform
Q:微信小游戲現(xiàn)在都是推薦用Unity的Application.targetFrameRate了嗎?現(xiàn)在我們用的這個WX.SetPreferredFramesPersecond,會產(chǎn)生什么問題嗎?沒Unity那個性能好?
![]()
A:幀率設置可能失效。現(xiàn)在微信小程序已對Application.targetFrameRate做了較好的適配。
更推薦用這個:
https://github.com/wechat-miniprogram/minigame-unity-webgl-transform/issues/713
針對以上問題,有經(jīng)驗的朋友歡迎轉至社區(qū)交流:
https://answer.uwa4d.com/question/6874a85b3d306f3e9d594f11
封面圖來源于網(wǎng)絡
今天的分享就到這里。生有涯而知無涯,在漫漫的開發(fā)周期中,我們遇到的問題只是冰山一角,UWA社區(qū)愿伴你同行,一起探索分享。歡迎更多的開發(fā)者加入UWA社區(qū)。
UWA官網(wǎng):www.uwa4d.com
UWA社區(qū):community.uwa4d.com
UWA學堂:edu.uwa4d.com
點擊下方名片關注我們,將我設為星標,及時接收小編每日推送哦,性能優(yōu)化不迷路~
近期精彩回顧
【萬象更新】
【厚積薄發(fā)】
【萬象更新】
【厚積薄發(fā)】
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.