前言
- 今天在項目打包后遇到一個bug
- 項目在電腦上跑沒問題,但是在手機端時,由于手機較差的性能,導致異步加載的資源需要等待較長的時間.
- 而我在一個地方本以為是同步加載的資源,但是在調用時發(fā)現本該被加載完成的資源加載失敗,
- 大佬查看過底層實現后給出結論:這個資源使用了異步的加載方式,這就導致了我后面的訪問越界.
- 我的解決辦法是通過開啟協程,等待資源加載完畢
不太了解協程的同學可以點擊這里: 協程簡介和常用方法文章來源地址http://www.zghlxwxcb.cn/news/detail-596983.html
主要邏輯
- 資源加載未完成時,后面的邏輯可以使用協程來進行等待
- 比如我這里異步創(chuàng)建5個對象
for (int i = 0; i < 5; i++)
{
// 異步創(chuàng)建對象5個
}
- 那么在這段循環(huán)之后的代碼,都需要考慮被創(chuàng)建的5個對象是否會被調用
- 如果需要被調用,則開啟協程等待
異步加載方法 (string name , Action<GameObject> action)
{
//...
}
Coroutine cor = null;
void func()
{
List<GameObject> list = new List<GameObject>();
for (int i = 0; i < 5; ++i)
{
異步加載方法 (str , (gO) =>
{
list.Add(gO);
});
}
//開啟協程等待
cor = StartCoroutine(SendData(list));
}
IEnumerator SendData(List<GameObject> list)
{
//等待list的元素個數達到5個
while (list.Count != 5) yield return null;
//處理邏輯
}
- 由于協程不會自動被關閉,所以即使銷毀了這個頁面時協程仍然會執(zhí)行
- 通常的處理方式是將協程存儲下來,如果不需要再次加載,那么就直接將它銷毀即可
文章來源:http://www.zghlxwxcb.cn/news/detail-596983.html
到了這里,關于Unity 如何使用協程等待加載完成的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!