UNInject 베이크 검증기
UNInjectBakeValidator는 IPreprocessBuildWithReport 를 구현합니다.
빌드가 시작되기 전에 한 번 실행되며, 동일 로직을 Window > UNInject > Validate Bake 에디터 메뉴에서도 돌릴 수 있습니다.
검증하려는 것
-
로드된 게임 어셈블리에서
[GlobalInject]/[SceneInject]필드를 찾습니다. -
Optional == false인 것만 “필수”로 봅니다.Optional이면 검증 대상에서 빠집니다. -
무키(Id 비어 있음) 과 Named(Id 지정) 를 서로 다른 집합으로 나눕니다.
- 무키 필드는 필드 타입
T가 베이크 목록에 있어야 함. - Named 필드는
RegistryKey(T, id)가 베이크 목록과 맞아야 합니다.
- 무키 필드는 필드 타입
-
EditorBuildSettings.scenes에서enabled인 씬만 순회합니다.각 씬을 필요 시 Additive로 연 뒤 :
MasterInstaller가 있으면_globalReferrals직렬화 배열을 읽어 무키·Named 커버 집합에 '합' 합니다.SceneInstaller가 있으면_sceneReferrals로 동일합니다.
한 씬 안에서 FindObjectOfType으로 잡히는 첫 마스터/씬 인스톨러만 읽습니다.
(씬에 여러 개가 있어도 검증은 그 첫 인스턴스 기준.)
실패 시 출력
-
누락마다
Debug.LogError로 한 줄씩 남깁니다.
예: 어떤 소비자 타입의[GlobalInject]가[Referral]로 등록된 타입을 찾지 못함 →Refresh Global Registry안내. -
Named 누락은
Referral(id:"…")/SceneReferral(id:"…")형태로 기대 키를 적어 줍니다.
빌드 실패 케이스
기본값에서는 에러 로그 + 경고 로그 정도이고 빌드는 계속됩니다.
UNINJECT_STRICT_BUILD 스크립팅 심볼을 정의하면 누락이 있을 때 BuildFailedException 으로 빌드를 중단합니다.
심볼이 없을 때는 콘솔에 “strict 심볼을 넣으면 빌드 실패로 만들 수 있다”는 안내 경고가 추가됩니다.
메뉴 실행
Window > UNInject > Validate Bake
-
문제 없으면 다이얼로그 성공 + (빌드 경로와 달리) 콘솔에 성공 로그는 생기지 않을 수 있음.
-
문제 있으면 에러 개수와 본문을 다이얼로그에 붙이고, 각 에러를
LogError로도 남깁니다.
의도적 무시 케이스
-
비활성 빌드 씬은 건너뜁니다.
-
런타임 전용
Register로만 존재하는 매핑은 직렬화된 referral 리스트에 없으면 “누락”으로 잡힐 수 있습니다.
CI에서 strict를 쓸 때는 베이크 가능한 것은 씬에 두거나 심볼·검증 전략을 조정해야 합니다.