第一步當載入完loading場景後,呼叫如下的loadgame
函式開始載入遊戲場景,使用非同步載入的方式載入場景1(loading場景為0,主場景為1),通過unity提供的coroutine機制,我們可以方便的在每一幀結束後呼叫setloadingpercentage
函式來更新介面中顯示的進度條的數值。
最後進度條的效果顯示如下:public
void
loadgame
()private
ienumerator
startloading_1
(int
scene
)}
為了讓進度條能顯示100%,取巧一點的辦法是將asyncoperation.progress
的值乘上2,這樣當載入到50%的時候介面上就顯示100%了。缺點是當介面上顯示100%的時候,使用者還要等待一段時間才會進入遊戲。其實unity提供了手動切換場景的方法,把asyncoperation.allowsceneactivation
設為false
就可以禁止unity載入完畢後自動切換場景,修改後的startloading_2
**如下:
我們首先將// this function is not work
private
ienumerator
startloading_2
(int scene)op.
allowsceneactivation
=true
;}
asyncoperation.allowsceneactivation
設為false
,當載入完成後再設為true
。**看上去沒有錯,但是執行的結果是進度條最後會一直停留在90%上,場景不會切換。通過列印log發現asyncoperation.isdone
一直為false
,asyncoperation.progress
的值增加到0.9後就保持不變了,也就是說場景永遠不會被載入完畢。
在這個帖子中找到了答案,原來把allowsceneactivation
設定為false
後,unity就只會載入場景到90%,剩下的10%要等到allowsceneactivation
設定為true
後才載入,這不得不說是乙個坑。所以**改為如下。當asyncoperation.progress
到達0.9後,就直接把進度條的數值更新為100%,然後設定asyncoperation.allowsceneactivation
為ture
,讓unity繼續載入未完成的場景。
最後的效果如下:private
ienumerator
startloading_3
(int scene)
setloadingpercentage
(100
);yield
return
newwaitforendofframe
();op
.allowsceneactivation
=true
;}
private
ienumerator
startloading_4
(int scene)
}toprogress
=100
;while
(displayprogress
<
toprogress)op
.allowsceneactivation
=true
;}
displayprogress
用來記錄要顯示在進度條上的數值,最後進度條的動畫如下:
對比第一種的進度條
如果在載入遊戲主場景之前還需要解析資料**,生成物件池,進行網路連線等操作,那麼可以給這些操作賦予乙個權值,利用這些權值就可以計算載入的進度了。如果你的場景載入速度非常快,那麼可以使用乙個假的進度條,讓玩家看上幾秒鐘的loading動畫,然後再載入場景。總之進度條雖然小,但要做好也是不容易的。
Unity場景載入進度條優化
du先生開發遊戲 為了增加遊戲體驗,我在日常會對進度條進行優化。通常通過非同步的方式載入場景,從而獲取場景進度。為了增加遊戲體驗,會使用兩個變數乙個變數接受場景的實際載入進度,另外乙個用來接受ui顯示進度。使用顯示進度向實際進度靠近的方式顯示進度條。主要 如下 public slider slide...
Flash載入進度條
第一種 1 在場景圖層1,先選擇文字工具,把屬性改為 動態文字 然後在舞台畫出乙個文字框,在屬性裡,在 變數 欄裡填上 bfb 2 再新建乙個影片剪輯,選擇矩形工具,不要填充顏色,只留筆觸顏色,在舞台繪製乙個矩形。選中矩形複製,再建一新圖層2,貼上到當前位置,然後選擇圖層2的矩形,關掉比觸顏色,開啟...
頁面載入進度條
第一 load fakeprogress 0,sb 第二 第三 load go 0 第四 loading.第五 load location.href url oncontextmenu window.event.returnvalue false ondragstart window.event.r...