Prefab이란?
자주 쓰이는 GameObject를 재사용하기 위해 Asset화 한 것이다.
사용처
정말 많다. 총알/화살과 같은 Projectile, Hit/Death 효과를 책임지는 Particle, 심지어 Enemy나 Player도 Prefab화의 대상이다. Scene Template에도 사용된다.
Prefab Override
Instance(원본 Prefab으로부터 Scene에 Instance된 GameObject)를 수정한 경우:
- 이 행위 자체는 원본 Prefab에 영향을 미칠 수 없다.
- 원본 Prefab과의 변경점이 Override되어 저장된다. (Override된 Instance!)
- Apply와 Revert 옵션이 활성화된다;
(Apply : Instance로 원본 Prefab을 덮어씌움 / Revert : 원본 Prefab으로 Instance를 덮어씌움) - 이런 식으로 Apply나 Revert를 한 경우, "원본 Prefab"과 "Instance"의 차이는 고려되지 않는다. 그냥 그대로 덮어씌워버린다.
원본 Prefab을 수정한 경우:
- Instance가 Override되지 않은 경우, 원본 Prefab으로 Instance를 덮어씌운다.
- Instance가 Override된 경우, 수정된 부분을 확인한다;
>> 만일 수정된 부분이 같다면, 원본 Prefab에서 수정한 부분이 Instance에 적용되지 않는다. (예시 : Instance Override를 scale.x를 1 -> 2로 바꿈으로써 했다. 원본 Prefab에선 scale.x를 1 -> 6으로 바꿨다. GIT CONFLICT!)
>> 만일 수정된 부분이 다르다면, 원본 Prefab에서 수정한 부분이 Instance에 적용된다. - 참고로 원본 Prefab을 수정할 땐 Auto Save를 끄고 작업하는 것이 좋다. Instance와는 다르게 Apply나 Revert 옵션을 선택하는 과정이 존재하지 않으므로...
Scene Template과의 연계
Scene Template의 옵션에서, 지정한 Assets를 Clone 할 것인지 Reference 할 것인지 선택할 수 있다. 이때, Prefab의 경우 무조건 Reference로 하는 것이 좋다. 어짜피 Instance에는 Override 기능이 있어서 Tilemap과 같이 각 Scene(Stage)마다 배치가 달라지는 경우에도 Prefab을 충분히 사용할 수 있다.