[Bug] AddressableのGroupsウインドウを開きながらアドレスを割り当てを実行すると長時間フリーズする
Rapilias opened this issue · 1 comments
Rapilias commented
概要
AddressableのGroupsウインドウが開いている状態でLayoutRuleEditor -> Apply to Addressables を実行すると、Groupが探索するファイル数によって数秒 ~ 数十秒程度のフリーズを引き起こします。
再現手順
- Addressableの単一のグループを作成する
- LayoutRuleEditorからObjectFilterを作成して適当なフォルダを1つ割り当てる
- フォルダ内にデフォルトのCubeのプレハブを1500個程度用意する
3.1 Ctrl+A -> Ctrl+Dを繰り返して50を超えたらエクスプローラーからのコピーに切り替える - LayoutRuleEditorからApply to Addressablesを実行して初回割り当てを行う
- 再度 Apply to Addressables して即座に完了する
- Window -> Asset Management -> Addressable -> Groups ウインドウを開く
- Apply to Addressables すると4~ 5秒程度フリーズする
3000個の時は30秒近くフリーズする
環境
OS: Windows11
Unity: 2020.3.40f1, 2023.2.3f1
Addressables: 1.18.19, 2.0.6
回避策
Addressables Groupsのウインドウを開かない
追加情報
手元の問題が起きているプロジェクト(2023.3f1)をDeepProfilingに掛けた所、
TryAddEntry()
, RemoveAllEntries()
がファイル毎にAddressableAssetGroup.SetDirty()
経由で再描画を走らせているようです。
Rapilias#5 で検証中ですが、Addressableが持っている
// AddressableAssetGroup
internal void RemoveAssetEntries(IEnumerable<AddressableAssetEntry> removeEntries, bool postEvent = true)
// AddressableAssetSettings
internal void CreateOrMoveEntries(IEnumerable guids, AddressableAssetGroup targetParent, List<AddressableAssetEntry> createdEntries, List<AddressableAssetEntry> movedEntries, bool readOnly = false, bool postEvent = true)
をリフレクション経由で呼び出して一括処理することでそれなりに改善されますが、SetLabelを一括で行う方法を見つけられず、解決には至っていません。
Haruma-K commented
v1.0.5でリリースしました、ありがとうございました!
https://github.com/CyberAgentGameEntertainment/SmartAddresser/releases/tag/1.0.5