![]()
這是第441篇UWA技術知識分享的推送,精選了UWA社區的熱門話題,涵蓋了UWA問答、社區帖子等技術知識點,助力大家更全面地掌握和學習。
UWA社區主頁:community.uwa4d.com
本期目錄:
- iOS如何確認內存擴展使用生效
- Puerts-WebGL可以用微信小游戲的EmscriptenGLX渲染模式嗎
- SpriteAtlasManager.atlasRequested延后一幀回調
- 微信小游戲中如何解決內存擴充問題
Platform
Q:請問在iOS開發過程中,開啟iOS的應用內存擴展功能后,是如何確認擴展功能生效的?目前我們在開啟打包后進行使用感覺不生效,但是發布上線對外后又好像生效了。
A:如果是指的是Increased Memory Limit,該功能的生效對蘋果設備和iOS版本都有一定要求。
可參考官網的說法:
An increased memory limit is only available on some device models. Call the os_proc_available_memory function to determine the amount of memory available. Higher memory use can affect system performance.
具體是否生效、效果如何,可能就要看手頭測試機內存加壓測試中閃退閾值的變化;或線上實際閃退率了。
感謝Faust@UWA問答社區提供了回答,歡迎大家轉至社區交流:
https://answer.uwa4d.com/question/6896bfd4682c7e5cd61bfadd
Platform
Q:請問Puerts-WebGL可以用微信小游戲的EmscriptenGLX渲染模式嗎?
A1: WebGL的調用需要走WASM才可以用EmscriptenGLX。
感謝jinfei@UWA問答社區提供了回答
A2:可以,但這個應該沒有很實際的收益。要看你們Pure的具體用法,但是GLX主要解決的是WASM和JS的高頻通信的問題,具體還是得看下你們的使用場景。
感謝yacentlin@UWA問答社區提供了回答
A3:Puerts只是業務腳本環境,渲染還是走的WebGL,可以用GLX的。
感謝肖海@UWA問答社區提供了回答,歡迎大家轉至社區交流:
https://answer.uwa4d.com/question/68906ae9244ce21ce9ec08e2
Editor
Q:實測,觸發SpriteAtlasManager.atlasRequested回調,比加載界面晚了一幀執行,導致會閃一幀白圖。請教有何優化辦法嗎?圖集已勾選Include in build。
A:Unity觸發SpriteAtlasManager.atlasRequested時,AssetBundle系統還沒初始化完畢,導致加載不到圖集,進去后顯示全白塊了。因為我用的是YooAsset插件,這個東西初始化是異步的。只有下次觸發SpriteAtlasManager.atlasRequested,才能再次加載圖集,這可能是加載一個新的SpriteAtlas、或者加載場景時。
解決這個的方法時,在AssetBundle系統還沒初始化時,SpriteAtlasManager.atlasRequested的請求先緩存起來,等初始化結束后再處理。
using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.U2D; namespaceGameCore.Unity { //場景一加載就會unity就會觸發atlasRequested,但是這時候AssetBundle系統還沒初始化,無法加載圖集。 //因此等待AssetBundle初始化后加載。 //從編輯場景進入游戲的話,編輯場景里也掛載這個組件就行了。 publicclassSpriteAtlasLoader : MonoBehaviour { //緩存Unity的請求 privatestatic Dictionary
requestAtlasCallbacks = new(); private IResManager resManager; //AssetBundle系統初始化后, 設置ResManager public void SetResManager(IResManager resManager) { this.resManager = resManager; foreach(var kv in requestAtlasCallbacks) { RequestAtlas(kv.Key, kv.Value); } requestAtlasCallbacks.Clear(); } private void OnEnable() { SpriteAtlasManager.atlasRequested += RequestAtlas; } private void OnDisable() { SpriteAtlasManager.atlasRequested -= RequestAtlas; } //AssetBundle系統初始化后,resManager不為null protected virtual void RequestAtlas(string atlasName, Action callback ) { if(resManager != null) { callback(ResManager.Instance.GetAsset (atlasName)); } else { requestAtlasCallbacks.Add(atlasName, callback); } } } }
因為我有一個專門編輯Prefab的場景,可以直接從這個場景進游戲,因此單獨做了一個組件,需要的場景里掛上就行了。
詳情可參考《Unity SpriteAtlasManager.atlasRequested趟坑》
https://blog.csdn.net/qiminixi/article/details/144762895
感謝小澤@UWA問答社區提供了回答,歡迎大家轉至社區交流:
https://answer.uwa4d.com/question/688757d2244ce21ce9ec08dc
Platform
Q1:微信小游戲中收到內存擴充的告警,一般是直接擴大JS預留內存嗎?
內存擴充一般加多少內存?現在內存350MB,而且這個峰值我們線下測試都是沒達到這么多的,線上版本的Dynamic memory是1.39KMB。
這個內存統計是只有Dynamic memory還是整個進程的內存呢?我們線下測試Dynamic內存基本才500MB,Xcode顯示的進程內存才1GB左右。
A:這個量級的Dynamic memory還蠻大的,一般內存擴容的方式可以在項目設置中進行調整,不過擴容期間,由于會進行內存塊的復制,會出現內存尖峰:
![]()
Q2:類似于350MB擴容到500MB,這個時候會產生一個350MB+500MB的內存峰值嗎? 你有建議的擴容設置嗎?比如我們項目有必要調整到768嗎?
A: 內存擴容一般不要高于1024MB都可以。
具體可以參考這篇文章:
https://unity.com/blog/engine-platform/understanding-memory-in-unity-webgl
感謝左君博@UWA問答社區提供了回答,歡迎大家轉至社區交流:
https://answer.uwa4d.com/question/68995d63682c7e5cd61bfae1
封面圖來源于網絡
今天的分享就到這里。生有涯而知無涯,在漫漫的開發周期中,我們遇到的問題只是冰山一角,UWA社區愿伴你同行,一起探索分享。歡迎更多的開發者加入UWA社區。
UWA官網:www.uwa4d.com
UWA社區:community.uwa4d.com
UWA學堂:edu.uwa4d.com
點擊下方名片關注我們,將我設為星標,及時接收小編每日推送哦,性能優化不迷路~
近期精彩回顧
【厚積薄發】
【厚積薄發】
【萬象更新】
【萬象更新】
![]()
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
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.