Prefab Variant
부모 프리팹을 기준으로 하는 상속의 개념
프리팹 배리언트는 프리팹의 사전 정의된 배리에이션 집합이 필요할 때 유용하다.
예를 들어 게임 내에 동일한 기본 로봇 프리팹에 기반한 여러 종류의 로봇을 만든 후 그중 일부 로봇이 아이템을 운반하거나, 다른 속도로 움직이거나, 추가 음향 효과를 내도록 만들어야 할 경우가 있다.
이러한 경우 모든 로봇이 공유할 기본 액션을 초기 로봇 프리팹이 모두 수행하도록 설정한 후 다음을 위한 여러 개의 프리팹 배리언트를 생성할 수 있다.
- 속도를 변경하도록 스크립트에 프로퍼티 오버라이드를 사용하여 로봇이 더 빠르게 움직이도록 한다.
- 추가 게임 오브젝트를 로봇의 팔에 연결하여 로봇이 아이템을 운반하도록 만든다.
- 삐걱거리는 소리를 재생하는 AudioSource 컴포넌트를 추가하여 로봇에게 녹슨 조인트를 제공한다.
프리팹 배리언트는 다른 프리팹(기본 프리팹이라고 불림)의 프로퍼티를 상속한다. 프리팹 배리언트에 적용된 오버라이드는 기본 프리팹의 값보다 더 우선시된다. 프리팹 배리언트는 다른 프리팹(모델 프리팹, 기타 프리팹 배리언트 등)을 기본 프리팹으로 가질 수 있다.
프리팹 배리언트 생성
여러 가지 방법으로 다른 프리팹에 기반한 프리팹 배리언트를 생성할 수 있다.
Project 뷰에서 프리팹을 마우스 오른쪽 버튼으로 클릭한 후 Create > Prefab Variant 를 선택한다. 그러면 선택한 프리팹의 배리언트가 생성된다. 이 프리팹 배리언트에는 오버라이드가 아직 없습니다. 프리팹 모드에서 프리팹 배리언트를 열어 오버라이드를 추가할 수 있다.
Hierarchy 창의 프리팹 인스턴스를 Project 창으로 드래그할 수도 있다. 이렇게 하면 새로운 원본 프리팹 또는 프리팹 배리언트를 생성할지 묻는 다이얼로그가 나타난다. 프리팹 배리언트를 선택하면 드래그한 프리팹 인스턴스에 기반한 새 프리팹 배리언트가 생성된다. 해당 인스턴스에 있는 모든 오버라이드는 새 프리팹 배리언트 안에 포함된다. 프리팹 모드에서 프리팹 배리언트를 열어 오버라이드를 추가, 편집, 제거할 수 있다.
프리팹 배리언트는 화살표로 장식된 파란색 프리팹 아이콘으로 표시된다.
프리팹 배리언트 편집
프리팹 모드에서 프리팹 배리언트를 열면 루트가 파란색 프리팹 아이콘이 있는 프리팹 인스턴스로 표시된다.
이 프리팹 인스턴스는 프리팹 배리언트가 상속받는 기본 프리팹을 나타내며, 프리팹 배리언트 자체를 나타내는 것은 아니다. 프리팹 배리언트에 대한 모든 수정 사항은 이 기본 프리팹에 대한 오버라이드가 되어 배리언트에 존재한다.
위 스크린샷에서 Robot With Oil Can 루트 게임 오브젝트를 선택하고 Inspector에서 Select 버튼을 클릭하면 Robot With Oil Can 배리언트가 아니라 기본 Robot 프리팹이 선택된다. 이는 프리팹 인스턴스가 기본 Robot 프리팹의 인스턴스이고 Select 버튼은 항상 인스턴스가 상속되는 프리팹 에셋을 선택하기 때문이다.
다른 프리팹 인스턴스와 마찬가지로, 프리팹 배리언트에 프리팹 오버라이드를 사용할 수 있다(예: 수정된 프로퍼티 값, 추가된 컴포넌트, 제거된 컴포넌트, 추가된 자식 게임 오브젝트 등). 여기에도 동일한 제한 사항이 적용된다. 기본 프리팹에서 상속받은 프리팹 배리언트의 게임 오브젝트는 부모를 변경할 수 없으며, 기본 프리팹에 존재하는 프리팹 배리언트의 게임 오브젝트를 제거할 수 없다. 하지만 게임 오브젝트를 프로퍼티 오버라이드로 비활성화하여 게임 오브젝트를 제거한 것과 동일한 효과를 얻을 수 있다.
참고: 프리팹 모드에서 프리팹 배리언트를 편집할 때 Overrides 드롭다운 창 또는 컨텍스트 메뉴를 통해 이러한 오버라이드를 적용하면 배리언트의 배리에이션이 기본 프리팹 에셋에 적용될 수도 있다는 점에 유의해야 한다. 이는 대부분 원하지 않는 결과이다. 프리팹 배리언트의 주요 목적은 유의미하고 재사용이 가능한 오버라이드 컬렉션을 편리하게 저장하도록 지원하는 것이다. 이러한 이유로 프리팹 배리언트는 대개 오버라이드로 유지되고, 기본 프리팹 에셋에 적용되지 않는다. 쉽게 설명하자면, 추가 Oil Can 게임 오브젝트를 기본 프리팹 에셋(“Basic Robot”)에 적용하면 프리팹 에셋에도 Oil Can 이 포함된다. Robot With Oil Can 배리언트의 존재 목적은 이 배리에이션이 기름통을 나르게 만들기 위함이므로, 추가된 Oil Can 게임 오브젝트는 프리팹 배리언트 내에 오버라이드로 남아 있어야 한다.
Overrides 드롭다운 창을 열면 헤더에서 오버라이드가 적용되는 오브젝트와 오버라이드가 존재하는 컨텍스트를 확인할 수 있다. 프리팹 배리언트의 경우 오버라이드가 기본 프리팹에 적용되고 프리팹 배리언트 내에 존재한다고 헤더에 표시된다. 이 점을 분명히 하기 위해 Apply All 버튼도 Apply All to Base 라고 표시된다.
출처 및 참고 : 유니티 메뉴얼 (https://docs.unity3d.com/kr/2018.4/Manual/PrefabVariants.html)
HyunZzang의 프로그래밍 공간 / 함께 공부해요!!
도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 부탁드립니다 :)