Quick Reference
Prefab asset은 project의 원본 template, Prefab instance는 scene에 놓인 instance, override는 그 instance만 다른 값입니다. Apply는 asset을 바꾸고, Revert는 instance의 차이를 버립니다. nested prefab과 variant에서는 어느 asset에 apply할지가 핵심입니다.
| 변경 목적 | 선택 | 결과 |
|---|---|---|
| 모든 instance의 기본 구성 변경 | Prefab Mode에서 asset 편집 | asset을 참조하는 모든 instance 영향 |
| 한 scene에서만 값 변경 | instance override | 해당 instance에만 유지 |
| 공통 prefab의 재사용 가능한 파생형 | Prefab Variant | base 변경을 상속하며 variant 기본값 보유 |
| nested child의 원본 변경 | individual override apply target 선택 | inner 또는 outer asset 중 의도한 곳에 적용 |
Inspector와 Overrides
Prefab instance root의 Inspector는 Open, Select, Overrides를 제공합니다. Overrides 창에서는 modified property, added/removed Component, added GameObject를 확인하고 개별 Apply/Revert를 할 수 있습니다. 굵은 Inspector 값은 property override의 표시지만, root Transform position·rotation처럼 scene placement 성격의 default override는 일반 Apply와 같은 방식으로 asset에 반영되지 않습니다.
Apply All은 편하지만 nested prefab/variant 구조에서는 outermost prefab으로 적용될 수 있습니다. inner child prefab의 공통 동작을 고치려는 변경을 outer prefab에 적용하면, 다른 사용처에는 반영되지 않고 override 구조만 깊어집니다. 이런 경우 개별 override의 apply target을 보고 선택하거나 inner Prefab Mode에서 수정합니다.
Variant와 구조 분화
Variant는 base prefab의 구조와 설정을 공유하면서 일부 default를 바꾸는 reusable derivative입니다. melee/ranged enemy처럼 hierarchy가 대부분 같고 weapon·speed·visual preset만 달라질 때 적합합니다. base와 variant가 서로를 우회 참조하거나, scene별 차이를 모두 variant로 만들기 시작하면 계보가 추적 불가능해집니다.
구조가 다른 object, 다른 lifetime owner, 다른 animation/physics 조합은 새 prefab으로 분리합니다. variant가 inheritance model을 완전히 대체하는 것은 아니며, C# behavior를 condition flag로 과도하게 분기시키는 이유가 되면 안 됩니다.
EnemyBase.prefab
├─ MeleeEnemy.prefab (Variant: speed, weapon preset)
└─ RangedEnemy.prefab (Variant: projectile preset)
Boss.prefab (별도 구조·수명주기라면 새 Prefab)런타임 생성과 검증
Instantiate한 instance도 source prefab의 serialized defaults에서 출발하지만, scene instance override와 runtime mutation은 다릅니다. runtime에서 고친 값이 source asset에 자동 Apply되지 않으며, Editor script로 prefab asset을 바꿀 때만 UnityEditor PrefabUtility workflow를 씁니다.
prefab 변경 뒤에는 base, 각 variant, representative scene instance를 열어 missing reference·override explosion·nested apply target을 확인합니다. prefab test scene은 빠른 validation에 좋지만, production build에 자동 포함되는지 여부는 folder가 아니라 Build Settings/Addressables policy로 확인합니다.
자주 틀리는 부분
| 증상 | 원인 | 수정 |
|---|---|---|
| 다른 scene의 prefab이 안 바뀜 | scene instance override만 변경 | asset edit 또는 원하는 override apply |
| inner prefab의 수정이 예상과 다름 | Apply All이 outer asset에 적용 | 개별 apply target 또는 Prefab Mode 선택 |
| variant마다 override가 폭증 | scene 특화 차이까지 variant에 저장 | scene override, 새 prefab, data asset 중 역할 분리 |
| runtime 값이 prefab asset에 남을 것으로 기대 | scene/runtime instance와 asset을 혼동 | asset authoring과 runtime state 분리 |
| test prefab이 build에 들어옴 | folder 이름만 build exclude로 믿음 | Build Settings·Addressables inclusion 확인 |
참고 링크
3 sources