?????個(gè)人主頁(yè):@元宇宙-秩沅
????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?!
????? 本文由 秩沅 原創(chuàng)
????? 收錄于專(zhuān)欄:unity每日一記
????推薦文章?
?【軟件設(shè)計(jì)師高頻考點(diǎn)暴擊】
?【Unityc#專(zhuān)題篇】之c#系統(tǒng)化大禮包】
?【unity數(shù)據(jù)持久化】數(shù)據(jù)管理類(lèi)_PlayerPrfs
?【unity本站最全系列】unity常用API大全一篇文章足以
??
??SceneManager場(chǎng)景資源動(dòng)態(tài)加載
???????加載場(chǎng)景的方法
- SceneManager.LoadScene() ; 場(chǎng)景同步加載
- SceneManager.LoadSceneSAsyn(); 場(chǎng)景異步加載
- SceneManage。GetActiveScene().name判斷當(dāng)前場(chǎng)景
- Application.LoadLevel():同步加載
- Application.LoadLevelAsync():異步加載
- Application.LoadLevelAddictive():同步附加式加載
- Application.LoadLevelAddictiveAsync():異步附加式加載
???????SceneManasger的操作
首先添加場(chǎng)景加載的命名空間Using UnityEngine.SceneManagement ;
而后把游戲場(chǎng)景都保存(拖拽)在 Buid setting 里面,相當(dāng)于存儲(chǔ)場(chǎng)景的目錄
1.同步加載
SceneManager.Load( 序列號(hào)) ;
SceneManager.Load( “場(chǎng)景名”) ;
void Start()
{
//SceneManager.LoadScene(1);
//SceneManager.LoadScene("TriggerTest");
}
缺點(diǎn):加載時(shí)造成畫(huà)面卡幀,因?yàn)椋谖醇虞d完成前畫(huà)面是停止的,所以是卡幀現(xiàn)象
2.異步加載
如果當(dāng)前場(chǎng)景 對(duì)象過(guò)多或者下一個(gè)場(chǎng)景對(duì)象過(guò)多
這個(gè)過(guò)程會(huì)非常的耗時(shí) 會(huì)讓玩家感受到卡頓
所以異步切換就是來(lái)解決該問(wèn)題的
通常我們和協(xié)程一起使用:
-
SceneManager.LoadAsync(序列號(hào))
-
SceneManager.LoadAsync(“場(chǎng)景名”)
-
StartCoroutine(協(xié)程迭代器方法() ); //調(diào)用協(xié)程
-
AsyncOperation 該類(lèi)型翻譯為異步操作 ,為下面獲得異步場(chǎng)景的返回值
AsyncOperation ao= SceneManager.LoadSceneAsync(2); -
ao.allowSceneActivation = true 激活場(chǎng)景
-
ao.progress 場(chǎng)景加載的進(jìn)度
//-----1.通過(guò)事件回調(diào)函數(shù) 異步加載------
AsyncOperation SS = SceneManager.LoadSceneAsync("XXXX");
SS.completed += (a) =>
{
print("加載結(jié)束");
};
SS.completed += LoadOver;
private void LoadOver(AsyncOperation ao)
{
print("LoadOver");
}
//---------2.通過(guò)協(xié)程異步加載--------
void Start()
{
//由于場(chǎng)景加載后就不會(huì)執(zhí)行加載后的邏輯了,如果要保存就使用 DontDestroyOnLoad(保留場(chǎng)景加載上個(gè)場(chǎng)景的東西)第一個(gè)異步方法不會(huì)出現(xiàn)該情況
DontDestroyOnLoad(this.gameObject);
StartCoroutine(LoadScene("XXXX"));
}
IEnumerator LoadScene(string name)
{
AsyncOperation SS= SceneManager.LoadSceneAsync(name);
//根據(jù)游戲規(guī)則 自定義進(jìn)度條變化的條件
yield return SS;
//1.場(chǎng)景加載結(jié)束 更新20%
//2.動(dòng)態(tài)加載怪物再更新20%
//3.動(dòng)態(tài)加載場(chǎng)景模型進(jìn)度條頂滿(mǎn)
//4.加載結(jié)束隱藏進(jìn)度條
}
總結(jié)
場(chǎng)景異步加載 和 資源異步加載 一樣
1.通過(guò)事件回調(diào)函數(shù)
2.協(xié)程異步加載
-
1.事件回調(diào)函數(shù)
優(yōu)點(diǎn):寫(xiě)法簡(jiǎn)單,邏輯清晰
缺點(diǎn):只能加載完場(chǎng)景做一些事情 不能在加載過(guò)程中處理邏輯 -
2.協(xié)程異步加載
優(yōu)點(diǎn):可以在加載過(guò)程中處理邏輯,比如進(jìn)度條更新等
缺點(diǎn):寫(xiě)法較為麻煩,要通過(guò)協(xié)程
場(chǎng)景管理器
public class SceneControl
{
private static SceneControl instance = new SceneControl();
public static SceneControl Instance => instance;
private SceneControl() { }
public void LoadScene(string name, UnityAction action)
{
AsyncOperation SS = SceneControl.LoadSceneAsync(name);
SS.completed += (Scene) =>
{
action();
};
}
}
????系統(tǒng)路線學(xué)習(xí)點(diǎn)擊跳轉(zhuǎn)?
?【Unityc#專(zhuān)題篇】之c#進(jìn)階篇】
?【Unityc#專(zhuān)題篇】之c#核心篇】
?【Unityc#專(zhuān)題篇】之c#基礎(chǔ)篇】
?【Unity-c#專(zhuān)題篇】之c#入門(mén)篇】
?【Unityc#專(zhuān)題篇】—進(jìn)階章題單實(shí)踐練習(xí)
?【Unityc#專(zhuān)題篇】—基礎(chǔ)章題單實(shí)踐練習(xí)
?【Unityc#專(zhuān)題篇】—核心章題單實(shí)踐練習(xí)
你們的點(diǎn)贊?? 收藏? 留言?? 關(guān)注?是我持續(xù)創(chuàng)作,輸出優(yōu)質(zhì)內(nèi)容的最大動(dòng)力!、文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-661126.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-661126.html
到了這里,關(guān)于【Unity每日一記】SceneManager場(chǎng)景資源動(dòng)態(tài)加載的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!