---------------------------------------------------------------------------------------
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資源加載並沒有任何多線程的功能啊
