불필요한 에셋 제거 기능에서 어드레서블도 예외 처리가 가능할까요?
paka9999 opened this issue · comments
Service
- WebView
- AssetManagement
- Communicator
- LogViewer
- Manager
- UI
- Profiler
- Adapter
- DLST
Version
2020.3.33f1
Summary
에셋번들은 필터링 해주는 기능이 있는 것 같은데, Addressables 관련 오브젝트나 리소스들은 따로 필터링 되지 않는 것 같아서요.
혹시 방법이 있다면, 알려주시면 감사하겠습니다 👍
Screenshots
Additional context
@paka9999
안녕하세요.
현재 Addressable은 의존성 때문에 필터링이 추가되어있지는 않습니다.
때문에 의존성을 추가하고 코드를 추가해야합니다.
방법은 다음과 같습니다.
- gpm_assetManagement 파일에 Unity.Adressable.Editor 의존성을 추가합니다.
- UnusedAssetFilter.cs 함수에 Addressable 오브젝트를 찾는 함수를 추가합니다.
아래 함수로 Addressable Path들을 받아올 수 있습니다.
namespace는 아래와 같습니다.
using UnityEditor.AddressableAssets;
using UnityEditor.AddressableAssets.Settings;
2-1. UnusedAssetFilter class 내부에 addressablePaths 리스트 변수를 추가합니다.
private List<string> addressablePaths = new List<string>();
2-2. UnusedAssetFilter class 내부에 addressablePaths 받아오는 함수를 추가합니다.
private void CheckAddressable()
{
AddressableAssetSettings aaSettings = AddressableAssetSettingsDefaultObject.Settings;
List<AddressableAssetEntry> addressableList = new List<AddressableAssetEntry>();
aaSettings.GetAllAssets(addressableList, true);
addressablePaths.Clear();
foreach (AddressableAssetEntry entry in addressableList)
{
addressablePaths.Add(entry.AssetPath);
}
}
-
Init() 함수에 위에서 추가한 CheckAddressable(); 함수를 추가합니다.
-
IsFilter 함수 내에 필터링 조건을 추가합니다.
for (int i = 0; i < filterList.Count; i++)
{
if(string.IsNullOrEmpty(filterList[i].filterPath) == false)
{
if (path.Contains(filterList[i].filterPath) == true)
{
return false;
}
}
}
(Option) 다른 옵션과 같이 bool filterAddressable 플래그를 추가하실 수도 있습니다.
툴 UI는 UnusedAssetFilterGUI.cs 의 OnGUI()내에서 제어됩니다.
@smflt-nhn 답변 감사합니다. 항상 잘 사용하고 있습니다 👍