본문으로 건너뛰기

UNInject 베이크 검증기

UNInjectBakeValidatorIPreprocessBuildWithReport 를 구현합니다.
빌드가 시작되기 전에 한 번 실행되며, 동일 로직을 Window > UNInject > Validate Bake 에디터 메뉴에서도 돌릴 수 있습니다.


검증하려는 것

  1. 로드된 게임 어셈블리에서 [GlobalInject] / [SceneInject] 필드를 찾습니다.

  2. Optional == false 인 것만 “필수”로 봅니다. Optional 이면 검증 대상에서 빠집니다.

  3. 무키(Id 비어 있음)Named(Id 지정)서로 다른 집합으로 나눕니다.

    • 무키 필드는 필드 타입 T 가 베이크 목록에 있어야 함.
    • Named 필드는 RegistryKey(T, id) 가 베이크 목록과 맞아야 합니다.
  4. 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를 쓸 때는 베이크 가능한 것은 씬에 두거나 심볼·검증 전략을 조정해야 합니다.