場景載入進度條優化方案

2021-07-09 01:16:06 字數 2176 閱讀 5215

第一步當載入完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一直為falseasyncoperation.progress的值增加到0.9後就保持不變了,也就是說場景永遠不會被載入完畢。

在這個帖子中找到了答案,原來把allowsceneactivation設定為false後,unity就只會載入場景到90%,剩下的10%要等到allowsceneactivation設定為true後才載入,這不得不說是乙個坑。所以**改為如下。當asyncoperation.progress到達0.9後,就直接把進度條的數值更新為100%,然後設定asyncoperation.allowsceneactivationture,讓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...