| 개요
Addressable 시스템에서 추가된 핵심 시스템 중 AnalyzeRule 시스템이 있다.

- 에디터 상단 메뉴 > Window > Asset Management > Addressables > Analzye
AssetBundle과 관련된 다양한 규칙들을 설정하고, 해당 규칙에 대한 검증 및 문제 해결까지 가능한 시스템이다.
기본적으로 아래와 같은 규칙이 제공된다.
- 중복 번들 종속성
- 빌트인 리소스와 어드레서블 어셋간 종속성
- 씬과 어드레서블간 종속성
- 번들 레이아웃 프리뷰 기능 (명시적, 암묵적으로 포함되는 어셋목록 리스트업)

기존에도 어셋의 종속성이나 Duplicated 이슈를 검증할 수 있는 AssetBundle Rrowser라는 툴을 제공되었으나,

기능을 확장하거나, 번들마다 설정을 달리하는 등의 작업이 용이하진 않았다.
Analyze System은 종전의 문제점들에서 착안 다양한 옵션을 제공하고 있다.
| Custom Analyze Rule 추가방법
using UnityEditor;
using UnityEditor.AddressableAssets.Build.AnalyzeRules;
public class CustomRule : AnalyzeRule
{
public override string ruleName
{
get { return "룰 이름"; }
}
// 문제 해결이 가능한지 여부
public override bool CanFix
{
get { return false; }
set { }
}
public override void FixIssues(AddressableAssetSettings settings)
{
base.FixIssues(settings);
// ...
// 문제 해결 로직
// ...
}
public override List<AnalyzeResult> RefreshAnalysis(AddressableAssetSettings settings)
{
var results = new List<AnalyzeResult>();
// ...
// 분석 로직
// ...
results.Add(new AnalyzeResult()
{
resultName = "Result Message",
severity = UnityEditor.MessageType.Info | Warning | Error
});
return results;
}
}
[InitializeOnLoad]
class RegisterCustomRule
{
static RegisterCustomRule()
{
// Analyze System에 등록을 해야만 Analzye 윈도우에서 노출됨
AnalyzeSystem.RegisterNewRule<CustomRule>();
}
}
AnalyzeRule 클래스를 상속하고 AnalyzeSystem에 등록만 해주면 간단하게 커스텀 Analyze Rule을 추가할 수 있다.
| GroupSchema로 AnalyzeSystem 100% 활용하기
어셋 그룹을 추가하게되면 아래 스키마들이 기본적으로 추가되어 있다.
(Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets 파일 참조)
- BundledAssetGroupScehema: 번들 빌드 및 로드 경로 / 압축 포맷 / 빌드 포함 여부 등 어셋번들에 관련된 다양한 옵션을 설정할 수 있는 스키마
- ContentUpdateGroupSchema: 해당 컨텐츠가 업데이트 가능한지 여부를 설정

패키지에서 제공하는 스키마외에도 커스텀 스키마를 정의, 추가가 가능하다.
using UnityEditor;
using UnityEditor.AddressableAssets.Build.AnalyzeRules;
using UnityEditor.AddressableAssets.Settings;
public class CustomSchema : AddressableAssetGroupSchema
{
[SerializeField] public string Foo;
}
public class CustomRule : AnalyzeRule
{
// ...
public override List<AnalyzeResult> RefreshAnalysis(AddressableAssetSettings settings)
{
ClearAnalysis();
var results = new List<AnalyzeResult>();
foreach (var group in settings.groups)
{
if (group.HasSchema<CustomSchema>())
{
var schema = group.GetSchema<CustomSchema>();
// ...
// 분석 로직
// ...
}
}
results.Add(new AnalyzeResult()
{
resultName = "Result Message",
severity = UnityEditor.MessageType.Info | Warning | Error
});
return results;
}
}
CustomSchema를 추가한 그룹에 대한 별도 처리가 가능하다.
이제부터 AnalyzeSystem 활용에 대한 다양한 활용방법이 떠오르는데, 이를테면 이런 것들이다.
- [어셋그룹]내의 텍스쳐 어셋의 포맷 혹은 압축 및 POT 여부를 설정하는 스키마를 추가 > 해당 그룹내의 텍스쳐를 분석 후 지정된 포맷으로 변환
- [어셋그룹]내의 저해상도 및 저성능 관련 내용을 설정하는 스키마 추가 > 해당 그룹내 저해상도 어셋을 자동생성
- [어셋그룹]내 시즌 상품에 관련된 모든 어셋을 지정하는 스키마를 추가, 미노출되어야하는 어세에 대한 처리
Bundle Mode 중 Pack Together By Label이란 옵션이 있는데,
(동일한 그룹내에서도 라벨 기준으로 번들 파일을 분리하여서 패키징할 수 있는 옵션)
패킹 레벨에서의 그룹과 Label의 용도의 차이점이 무엇인지 이해하기 어려웠다.
하지만 어셋 그룹 스키마와 Custom Analyze Rule에 관련된 예제를 보고는 확실히 개념이 정리가 되었다.
- 라벨링이 필요없는 경우 > Pack Together
- 번들 자체는 분리되어야 하지만, 어셋 그룹에 대한 설정은 공유하는 경우 > Pack Togher by Label
| 마치며
AnalzyeSystem의 사용법과 커스텀 룰을 추가하는 방법과 어셋 그룹 스키마와 활용하는 방법까지 알아보았다.
테스트나 번들 별 옵션 지정 등 다양한 기능을 제공하면서도 잘 정리된 느낌이 들었다.
종전의 시스템으론 커버하기 힘든 요구사항까지 다 핸들링 가능한 시스템으로 적극적으로 사용한다면 다양한 용도로 사용할 수 있을 것으로 기대된다.
| 참고
'Workspace > Unity3d' 카테고리의 다른 글
[Addressable] Default Profile Path 및 관련 변수 (0) | 2023.03.27 |
---|---|
[Addressable] 번들 패킹 및 네이밍 설정 (0) | 2023.03.27 |
SerializeField와 ? 연산자 (0) | 2023.03.24 |
[Unity3d] Exception occurred inside BeeDriver: System.IO.IOException 이슈 (0) | 2023.03.24 |
[Unity3d] 전처리 (0) | 2023.03.24 |