UNITY所謂的異步加載幾乎全部是協程,不是線程;MAP3加載時解壓非常慢


 

---------------------------------------------------------------------------------------

 

PS,看到評論區有人罵我,其實這個僅僅是我個人的筆記,是剛接觸UNITY的時候寫的,有時間我會再確認下,對錯僅供參考

 

 

實踐證明,以下東西都是協程,並非線程(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資源加載並沒有任何多線程的功能啊

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM