協程及非同步載入資源場景
同步載入:在主執行緒中進行載入
非同步載入:單獨開闢一個載入的執行緒用來載入資源,不影響主執行緒的進行
協程
協程是在主執行緒執行的同時開啟另一段邏輯處理,來協同當前程式的執行
協程與多執行緒的區別
Unity中雖然可以開啟執行緒但是不能直接呼叫Unity中大部分的Api,協程可以代替執行緒,但協程不是多執行緒,只是在模擬多執行緒。
在多處理器下,從概念上來講,多執行緒程式同時執行多個執行緒,而在任意時刻只有一個協程在執行
協程的開啟
StartCoroutine(“協程函式名”,引數);
StartCoroutine(函式(引數));
協程函式的定義
返回值必須是IEnumerator介面型別的;
程式必須有yield return ;
協程中可以有引數;
協程函式執行先執行yield return之前的程式碼,之後跳轉出該程式,直到等待條件滿足,再跳轉回來執行yield return之後的程式碼。
private IEnumerator Test()
{
yield return 等待條件;
Print(“等待時間結束”);
}
協程函式中yield return 後跟的是等待條件
yield return null 等待一幀;
yield return WaitForSeconds(時間) 等待秒數;
yield break 直接跳出協程;
yield return 物件 等待某個物件完成某種操作,如載入資源,場景
資源
資源的同步載入
Resources.Load<型別>(“相對路徑”);
使用Resources.Load進行載入的時候如果載入的資源過大,因為在同一執行緒內進行載入,所以在載入沒完成之前不會進行以後的程式碼。所以程式會直接卡住。
資源的非同步載入
Resources.LoadAsync<型別>(“相對路徑”);
配合協程可以進行非同步載入資源
IEnumerator LoadResources()
{
ResourceRequest rr = Resources.LoadAsync("");
yield return rr;
}
該程式可以非同步載入資源,ResourceRequest引數中是資源載入過程中的資訊,例如載入是否完成
場景
場景的同步載入
SceneManager.LoadScene(“場景名”);
SceneManager.LoadScene(場景索引);
如果要載入的場景太大的話,程式會卡頓,在玩的遊戲中載入場景時會有一個載入場景進度條,如果在同一程式中載入場景就不能顯示載入進度。所以要用非同步載入。
場景的非同步載入
AsyncOperation 載入過程中的一些引數。
allowSceneActivation:場景載入完是否要直接跳轉。
isDone:載入完場景並且啟用才設定為true
progress:這個是載入進度,利用這個就可以實現進度條。當allowSceneActivation為true 時進度最高位1;當allowSceneActivation為false時進度最高就到0.9,或許是因為沒有啟用總差一點把
非同步載入的實現
相關文章
- AssetBoundle載入非預設資源
- unity入門—資源匯入與場景建立Unity
- 對執行緒、協程和同步非同步、阻塞非阻塞的理解執行緒非同步
- setState同步非同步場景非同步
- 非同步與協程非同步
- C#如何載入嵌入到資源的非託管dllC#
- tinker熱修復——資源補丁載入過程
- HBase 寫吞吐場景資源消耗量化分析及優化優化
- HBase寫吞吐場景資源消耗量化分析及優化優化
- Cocos Creator 資源載入流程剖析【六】——場景切換流程
- 圖資料庫及應用場景資料庫
- AI入門課程資源AI
- 11、協程和io教程01 -- 併發 並行 同步 非同步 阻塞 非阻塞 以及 IO多路複用並行非同步
- 瀏覽器頁面資源載入過程與優化瀏覽器優化
- redis資料型別及應用場景Redis資料型別
- HTAP資料庫及應用場景分析資料庫
- Redis 資料型別及應用場景Redis資料型別
- 非扁平網路場景下,基於開源istio治理CCE多叢集
- Unity大密度建築場景載入解決方案Unity
- 非同步爬蟲之理解協程非同步爬蟲
- 爬蟲之多工非同步協程爬蟲非同步
- 複雜「場景」資料匯入匯出
- TS_0001:同步載入資料
- JVM之類載入器、載入過程及雙親委派機制JVM
- Redis的資料結構及應用場景Redis資料結構
- Redis五種資料結構及使用場景Redis資料結構
- [Unity-24] Unity的四種載入場景的方法Unity
- 非阻塞載入指令碼指令碼
- Python非同步協程(asyncio詳解)Python非同步
- 同步協程的必備工具: WaitGroupAI
- golang 多協程的同步方法總結Golang
- Zookeeper應用場景和ZAB協議協議
- echarts非同步載入Echarts非同步
- dhtmlXTree非同步載入HTML非同步
- 域名劫持資源重載入方案
- 學習下ECharts 非同步載入資料Echarts非同步
- sqlldr 載入資料 OGG 是否會同步SQL
- Redis 5種資料結構 及使用場景分析Redis資料結構