UNITY所谓的异步加载几乎全部是协程,不是线程;MAP3加载时解压非常慢
UNITY所謂的異步加載幾乎全部是協程,不是線程;MAP3加載時解壓非常慢
實踐證明,以下東西都是協程,并非線程(thread):
1,WWW
2,AssetBundle.LoadFromFileAsync
3,LoadSceneAsync
其它未經測試
此問題的提出是由于一個約3.5M的MP3背景音樂文件的加載。
測試中發現該文件加載時角色走路會有一個短暫的卡頓,經測試是加載此MP3造成的約0.3S的卡頓。
為解決此問題,決定使用LoadFromFileAsync代替LoadFromFile來進行異步加載,結果發現沒有任何作用,證明此異步函數只是協程。
然后嘗試使用WWW來加載,在UPDATE里詢問加載結果:isdone,結果仍然同樣的卡,沒有任何改變。證明WWW也只是協程,不是多線程的。
------------------------------------------------------
其實MP3只有3M左右,不應該那么卡,原因是在其壓縮選項設置:decompressOnLoad,表示加載時解壓,U3D文檔特別強調了對于大的MP3,使用此選項是非常愚蠢的。
原以為大的MP3是指10M以上的,沒想到這就算大的了。。。
最后通過修改壓縮選項為compressInMemory解決問題,絲毫不卡。
--------------------------------------
本來想利用C#的Thread類來加載磁盤上的.mp3到內存,然后使用UNITY的 assetbundle.loadFromMemory(bytes[])來加載,如果行得通則肯定不卡。
有點麻煩,有時間再搞。
---------------------------------------------------------------------------
PS: 看來UNITY資源加載并沒有任何多線程的功能啊
posted on 2017-09-15 12:50 時空觀察者9號 閱讀(...) 評論(...) 編輯 收藏
總結
以上是生活随笔為你收集整理的UNITY所谓的异步加载几乎全部是协程,不是线程;MAP3加载时解压非常慢的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】关于 Lua 内存泄漏的检测
- 下一篇: 程序占用的内存分类