コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】Addressables でリモートカタログの更新が存在するか確認する時にメインスレッドが止まらないようにする方法

検証環境

  • Addressables 1.16.19

概要

  • Addressables で管理しているグループが多いと、
    Addressables.CheckForCatalogUpdates の処理に時間がかかるようになり、
    メインスレッドが止まってしまう
  • 重たい処理は CheckCatalogsOperation.Execute 関数なので
    この部分を Tesk.Run で別スレッドに処理を逃してあげることで
    メインスレッドが止まることは防げる

CheckCatalogsOperation.cs

54 行目以降

protected override async void Execute()
{
    var result = new List<string>();
    await System.Threading.Tasks.Task.Run
    (
        () =>
        {
            for (int i = 0; i < m_DepOp.Result.Count; i++)
            {
                var remHashOp  = m_DepOp.Result[i];
                var remoteHash = remHashOp.Result as string;
                if (!string.IsNullOrEmpty(remoteHash) && remoteHash != m_LocalHashes[i])
                {
                    result.Add(m_LocatorInfos[i].Locator.LocatorId);
                    m_LocatorInfos[i].ContentUpdateAvailable = true;
                }
            }
        }
    );
    Complete(result, true, null);
}