Version: 2017.4
정적 게임 오브젝트
런타임 시 프리팹 인스턴스화

프리팹

컴포넌트를 추가하고 해당 프로퍼티를 적절한 값으로 설정하여 씬에서 게임 오브젝트를 만드는 것이 편리합니다. 하지만 씬에 여러 번 재사용되는 NPC, 소품 또는 풍경과 같은 오브젝트가 있을 때 문제가 발생할 수 있습니다. 오브젝트를 복사하기만 하면 복제본이 생성되지만 모두 개별적으로 편집할 수 있습니다. 일반적으로 특정 오브젝트의 모든 인스턴스가 동일한 프로퍼티를 가지는 것이 좋기 때문에, 씬의 한 오브젝트를 편집할 때 모든 사본에 동일한 편집을 반복하여 적용해야 한다면 상당히 번거롭습니다.

다행히 Unity에는 프리팹(Prefab) 에셋 타입이 있어 컴포넌트 및 프로퍼티가 있는 게임 오브젝트(GameObject) 오브젝트를 저장할 수 있습니다. 프리팹은 씬에서 새로운 오브젝트 인스턴스를 생성할 수 있는 템플릿으로 사용됩니다. 프리팹 에셋에 대한 모든 편집 내용은 해당 인스턴스에서 생성된 모든 인스턴스에 즉시 반영되지만 각 인스턴스의 컴포넌트와 설정을 개별적으로 오버라이드 할 수도 있습니다.

참고: 에셋 파일(예: 메시)을 씬으로 드래그하면 새 오브젝트 인스턴스가 생성되고 원래 에셋이 변경되면 모든 인스턴스가 변경됩니다. 하지만 그 동작이 표면적으로 유사하더라도 에셋은 프리팹이 아니므로 컴포넌트를 추가하거나 아래 설명된 다른 프리팹 기능을 사용할 수 없습니다.

프리팹 사용

Asset > Create Prefab 을 선택한 다음 씬의 오브젝트를 나타나는 “비어 있는” 프리팹 에셋으로 드래그하여 프리팹을 생성할 수 있습니다. 그런 다음, 다른 게임 오브젝트를 프리팹으로 드래그할 경우 현재 게임 오브젝트를 새로운 것으로 대체할지 묻는 메시지가 표시됩니다. 프로젝트 뷰에서 프리팹 에셋을 씬 뷰로 드래그하기만 하면 프리팹 인스턴스가 생성됩니다. 프리팹 인스턴스로 생성된 오브젝트는 계층 구조 뷰에서 파란색 텍스트로 표시됩니다. 일반 오브젝트는 검정색 텍스트로 표시됩니다.

위에서 언급한 바와 같이 프리팹 에셋 자체의 변경 사항은 모든 인스턴스에 반영되지만 개별 인스턴스를 별도로 수정할 수도 있습니다. 즉, 비슷한 NPC를 몇 개 만들되 서로 차이를 두어 현실감을 주려고 할 때 유용합니다. 프로퍼티가 오버라이드되었을 때 이를 명확하게 하기 위해 인스펙터에 이름 레이블이 굵게 표시됩니다. 완전히 새로운 컴포넌트가 프리팹 인스턴스에 추가되면 모든 프로퍼티가 굵게 표시됩니다.

Cast Shadows가 오버라이드된 프리팹 인스턴스의 메시 렌더러
“Cast Shadows”가 오버라이드된 프리팹 인스턴스의 메시 렌더러

스크립트의 런타임 시점에서도 프리팹의 인스턴스를 생성할 수 있습니다. 자세한 내용은 매뉴얼의 프리팹 인스턴스화 페이지를 참조하십시오.

인스턴스에서 프리팹 편집

프리팹 인스턴스용 인스펙터에는 일반 오브젝트에는 없는 Select, RevertApply 세 개의 버튼이 있습니다.

Select 버튼은 인스턴스가 생성된 프리팹 에셋을 선택합니다. 이를 통해 기본 프리팹을 편집하여 모든 인스턴스를 변경할 수 있습니다. 하지만 Apply 버튼을 사용하여 인스턴스의 오버라이드된 값을 원본 프리팹에 다시 저장할 수도 있습니다(변경된 트랜스폼 포지션과 회전 값은 분명한 이유로 제외됨). 이렇게 하면 단일 인스턴스를 통해 모든 인스턴스(변경된 값을 오버라이드하는 인스턴스 제외)를 효과적으로 편집할 수 있으며, 매우 빠르고 편리하게 전역 변경을 할 수 있습니다. 오버라이드 프로퍼티를 테스트하지만 기본값을 선호하는 것으로 결정할 경우 Revert 버튼을 사용하여 인스턴스를 해당 프리팹으로 재정렬할 수 있습니다.

정적 게임 오브젝트
런타임 시 프리팹 인스턴스화