Unity異步加載場景SceneManager.LoadSceneAsync與AsyncOperation的使用(轉(zhuǎn))

本文轉(zhuǎn)至:傾戀你的美? ? ?原文鏈接:https://blog.csdn.net/qq_42462109/article/details/83096135? ? 大家多多支持大佬

1履恩、關(guān)于Unity異步加載場景首先要提到兩點(diǎn)


①? Application.LoadLevel加載場景的方式早已被SceneManager.LoadSceneAsync("你的場景名稱")替代锰茉,并且在官方API中有提到使用AsyncOperation來決定操作是否完成,如圖:

②? 關(guān)于AsyncOperation:

? ? ?AsyncOperation的progress(0-1)屬性在isDone為false時(shí)切心,最大加載到0.9就會暫停飒筑,直到isDone為true時(shí)才會繼續(xù)加載0.9-1.0的這10%,而isDone為true或fasle的標(biāo)志為是: 當(dāng)allowSceneActivation = false绽昏,isDone為false 协屡,allowSceneActivation = false 的作用是讓場景不會在加載完成后自動跳轉(zhuǎn)到下一個場景,? ?當(dāng)allowSceneActivation = true全谤,isDone為true肤晓,或者progress = 1.0時(shí) isDone = true,這點(diǎn)官方API也有提到啼县,如圖:

前提條件介紹完了,下面開始正式介紹Unity異步加載場景的方法:

步驟:

? ? ? ? ? 1沸久、?假設(shè)需要從場景A跳轉(zhuǎn)到場景B季眷,由于場景B場景較大,如果采用同步加載方式卷胯,就會在場景A某一幀處卡頓(看上去就像死機(jī)了)子刮,什么也不能做,假如玩家的電腦配置較高,很快加載完了跳到B場景了還好挺峡,但是碰到還在用奔騰處理器的選手葵孤,你要他等多久,誰也不知道橱赠,所以我們這時(shí)新建一個場景C用于顯示進(jìn)度條(雖然還是需要等待尤仍,但是你最起碼給玩家點(diǎn)心理準(zhǔn)備)

? ? ? ? ? 2、場景A狭姨,此處只放置一個按鈕用于跳轉(zhuǎn)場景宰啦,如圖:


? ? ? ? ?3、場景B饼拍,為了能看到進(jìn)度條的效果赡模,所以特意加大了場景,如圖:


? ? ? 4师抄、顯示進(jìn)度條的場景C漓柑,如圖:


? ? ? ? ? 5、首先從場景A采用同步加載的方式加載到場景C叨吮,由于場景C只有顯示進(jìn)度條的UI辆布,所以這一步即使玩家電腦配置不高,也可以瞬間加載挤安,所以直接采用同步加載谚殊,代碼如下:


//實(shí)現(xiàn)PointerClickHandler接口用于監(jiān)聽UGUI鼠標(biāo)點(diǎn)擊操作

public class ToLoadingScene : MonoBehaviour, IPointerClickHandler {

? ? [Tooltip("下個場景的名字")]

? ? public string nextSceneName;

? ? public void OnPointerClick(PointerEventData eventData) {

? ? ? ? SceneManager.LoadScene(nextSceneName);

? ? }

}

? ? ? ? ? 6、場景C使用協(xié)程異步加載下一個場景蛤铜,同時(shí)將異步加載的進(jìn)程數(shù)值轉(zhuǎn)換為進(jìn)度條的形式顯示出來嫩絮,當(dāng)加載完成時(shí),根據(jù)需求選擇自動跳轉(zhuǎn)到下一個場景還是手動跳轉(zhuǎn)(此處我選擇手動跳轉(zhuǎn))围肥,代碼如下:


//這個腳本我掛在了我用于顯示百分比的Text下

public class LoadAsyncScene : MonoBehaviour {


? ? //顯示進(jìn)度的文本

? ? private Text progress;

? ? //進(jìn)度條的數(shù)值

? ? private float progressValue;

? ? //進(jìn)度條

? ? private Slider slider;

? ? [Tooltip("下個場景的名字")]

? ? public string nextSceneName;

? ? private AsyncOperation async = null;

? ? private void Start() {

? ? ? ? progress = GetComponent<Text>();

? ? ? ? slider = FindObjectOfType<Slider>();

? ? ? ? StartCoroutine("LoadScene");

? ? }

? ? IEnumerator LoadScene() {

? ? ? ? async = SceneManager.LoadSceneAsync(nextSceneName);

? ? ? ? async.allowSceneActivation = false;

? ? ? ? while (!async.isDone) {

? ? ? ? ? ? if (async.progress < 0.9f)

? ? ? ? ? ? ? ? progressValue = async.progress;

? ? ? ? ? ? else

? ? ? ? ? ? ? ? progressValue = 1.0f;

? ? ? ? ? ? slider.value = progressValue;

? ? ? ? ? ? progress.text = (int)(slider.value * 100) + " %";

? ? ? ? ? ? if (progressValue >= 0.9) {

? ? ? ? ? ? ? ? progress.text = "按任意鍵繼續(xù)";

? ? ? ? ? ? ? ? if (Input.anyKeyDown) {

? ? ? ? ? ? ? ? ? ? async.allowSceneActivation = true;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? yield return null;

? ? ? ? }

? ? }


}

從上面代碼看出剿干,我對于progress在sync.allowSceneActivation = false時(shí)只能加載到0.9的解決方案為:當(dāng)progress加載到0.9時(shí),我們默認(rèn)場景加載完成穆刻,直接讓進(jìn)度條顯示100%置尔,然后等待剩余10%加載完成,期待未來有別的解決方案氢伟。

導(dǎo)出后的結(jié)果:不會做動圖榜轿,多截幾張吧...??

另外提一嘴,在Unity編輯器模式下是看不出來進(jìn)度條正常變化的朵锣,只有導(dǎo)出項(xiàng)目后才能看到正常進(jìn)度條


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

作者:傾戀你的美

來源:CSDN

原文:https://blog.csdn.net/qq_42462109/article/details/83096135

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谬盐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子诚些,更是在濱河造成了極大的恐慌飞傀,老刑警劉巖皇型,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異砸烦,居然都是意外死亡弃鸦,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門幢痘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唬格,“玉大人,你說我怎么就攤上這事雪隧∥餍” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵脑沿,是天一觀的道長藕畔。 經(jīng)常有香客問我,道長庄拇,這世上最難降的妖魔是什么注服? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮措近,結(jié)果婚禮上溶弟,老公的妹妹穿的比我還像新娘。我一直安慰自己瞭郑,他們只是感情好辜御,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屈张,像睡著了一般擒权。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阁谆,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天碳抄,我揣著相機(jī)與錄音,去河邊找鬼场绿。 笑死剖效,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的焰盗。 我是一名探鬼主播璧尸,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼熬拒!你這毒婦竟也來了爷光?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤梦湘,失蹤者是張志新(化名)和其女友劉穎瞎颗,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捌议,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哼拔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瓣颅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倦逐。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖宫补,靈堂內(nèi)的尸體忽然破棺而出檬姥,到底是詐尸還是另有隱情,我是刑警寧澤粉怕,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布健民,位于F島的核電站,受9級特大地震影響贫贝,放射性物質(zhì)發(fā)生泄漏秉犹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一稚晚、第九天 我趴在偏房一處隱蔽的房頂上張望崇堵。 院中可真熱鬧,春花似錦客燕、人聲如沸鸳劳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赏廓。三九已至,卻和暖如春还绘,著一層夾襖步出監(jiān)牢的瞬間楚昭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工拍顷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抚太,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓昔案,卻偏偏與公主長得像尿贫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子踏揣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 加載場景的功能想必在游戲開發(fā)中是十分常見的了庆亡。如果想從一個場景過渡到另一個包含資源較多的場景,必然需要等待一...
    WithStream閱讀 4,800評論 1 1
  • 一捞稿、簡述 在我們實(shí)際的項(xiàng)目開發(fā)中又谋,項(xiàng)目中通常有一個以上的場景Scene拼缝,尤以MOBA和RGP有大量的Sce...
    JCone閱讀 6,642評論 1 3
  • 場景(Scene)是Unity中組織我們的環(huán)境,物品彰亥,玩家咧七,障礙等一切游戲相關(guān)的內(nèi)容的地方。我們基本上可以把Sce...
    阿知賀閱讀 4,970評論 0 3
  • 異步任務(wù)相信大家應(yīng)該不會陌生任斋,那么本章內(nèi)容MOMO將帶領(lǐng)大家學(xué)習(xí)Unity中的一些異步任務(wù)继阻。在同步加載游戲場景的時(shí)...
    木易一帆閱讀 1,300評論 0 4
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,358評論 0 17