[Unity] Addressables 在切換 Scene 同時進行 Load 會卡住

[Unity] Addressables 在切換 Scene 同時進行 Load 會卡住


2022/07/03 03:46:53

這篇其實是滿久以前打的,想說來試著寫一篇教程式或 Blog-like 的文章,寫好之後一直壓在我的 hackmd 裡面沒有公開,現在總算有地方可以拿出來了。
不過我沒試過最新版本的 Addressables 有沒有修好這問題,還是放出來給各位參考下

以下為廠商提供原文

問題簡介

rt,前幾天在弄專案時用到 Addressables 拆出 DLC 包,
在實作時,想法是讀取場景時順便載包,程式邏輯大致如下所示

1
2
3
4
5
6
7
8
9
10
11
var loadScene = SceneManager.LoadSceneAsync("Main");
var loadAddressables = Addressables.LoadAssetAsync<GameObject>($"something");
loadScene.allowSceneActivation = false;

while(!loadScene.isDone || !loadAddressables.isDone)
{
Debug.log(loadScene.progress / 0.9f + loadAddressables.PercentComplete);
yield return 0;
}

loadScene.allowSceneActivation = true;

程式會卡在中間的迴圈出不來,loadAddressables.PercentComplete 永遠卡在同一個固定數字
並且完全沒有報錯報warn報error,把 Addressables 的 log 全開也沒有東西

解法

Debug 了兩天,把程式邏輯稍微改一下又可以了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var loadScene = SceneManager.LoadSceneAsync("Main");
while(!loadScene.isDone)
{
Debug.log(loadScene.progress / 0.9f / 0.5f);
yield return 0;
}

var loadAddressables = Addressables.LoadAssetAsync<GameObject>($"something");

while(!loadAddressables.isDone)
{
Debug.log(0.5f + loadAddressables.PercentComplete / 0.5f);
yield return 0;
}

References

  • https://forum.unity.com/threads/addressables-assetloading-is-blocked-by-async-scene-loading.670822/