關於Unity異步加載場景WebGl端需注意的

win10
unity2018.2.6web

加載場景如今習慣用異步加載瀏覽器

AsyncOperation ao = SceneManager.LoadSceneAsync(string SceneName);

寫在協程裏,而從ao中能夠得到加載進度異步

float progress = ao.progress;

這樣能夠控制加載進度條,或者文字顯示百分比ide

按照網上不少事例的一樣用法,通常是先把自動加載場景關掉動畫

ao.allowSceneActivation = false;

也就是說,加載完成,也不跳轉場景,須要手動控制
固然這裏有個小抗就是這個false要在加載進度在90%如下
若是到了90%之後,再設置爲true,也不會跳轉webgl

我原先的作法就是在協程裏設while循環,裏面判斷是否到了90%,到了則跳出循環並設置爲true,而後就自動加載了。code

while(ao.progress<0.9f)
{
  //……
}
ao.allowSceneActivation = true;

從表現上來看,沒有任何問題協程

可是這裏有個小坑,尤爲是webgl端要注意的是若是一開始設置內存

ao.allowSceneActivation = false;

則加載新場景會大量的佔用內存,對於webgl端所運行的瀏覽器來講,若是場景大,那根本是直接奔潰。string

因此,正確作法就是一開始就設置爲true

ao.allowSceneActivation = true;

反正是異步的,加載動畫什麼的也不會卡,關鍵是不會莫名其妙的佔用大量內存,固然這麼說是由於加載場景時採用這兩種不一樣策略,爲何內存的佔用會差距如此之大,這個機制不太瞭解。
其實不論發佈什麼平臺,都是這樣,可是pc端內存大了也抗的住,而webgl端就太脆弱了,必定要注意。

剛剛想到另外一點,就是若是把場景打成ab包進行加載,也是會巨量佔用內存,以前作的webgl項目,場景比較大,這樣加載瀏覽器根本沒法承受(除非是很是小的場景)

相關文章
相關標籤/搜索