본문 바로가기
C#/Unity

Unity Prefab 사용법: 게임 오브젝트 효율적으로 관리하기

by GangDev 2024. 4. 17.

Prefab이란?

 

Unity에서 Prefab은 게임 오브젝트의 템플릿으로, 게임 내에서 재사용되는 오브젝트를 효율적으로 관리하고 저장하는 데 사용된다.

Prefab은 씬(Scene) 내의 기본 오브젝트로, 캐릭터, 소품, 장치물, 카메라, 웨이포인트 등을 표현할 수 있다.

오브젝트의 기능은 그것에 연결된 컴포넌트에 의해 정의되며, 이 오브젝트는 모든 컴포넌트, 속성 값, 그리고 자식 오브젝트를 포함하여 재사용 가능한 에셋으로 저장된다.

Prefab 에셋은 씬 내에서 새로운 Prefab 인스턴스를 생성하기 위한 템플릿 역할을 한다.

 

Unity의 Prefab 시스템은 게임 오브젝트를 효율적으로 관리하고 재사용할 수 있게 해주며, 게임 개발 과정에서 중요한 역할을 한다.

 

Prefab 사용하는 이유

 

* 재사용성:

특정 방식으로 구성된 오브젝트(예, NPC, 소품, 장치물)를 씬 내의 여러 곳이나 프로젝트 내의 여러 씬에서 재사용하고자 할 때, Prefab으로 변환하는 것이 복사 붙여넣기보다 효율적이다.

Prefab 시스템을 사용하면 모든 복사본을 자동으로 동기화할 수 있으며, 프로젝트 전체에서 광범위한 변경을 쉽게 할 수 있다.

 

* 복잡한 계층 구조 생성:

Prefab을 다른 Prefab 내부에 중첩시켜 여러 수준에서 쉽게 편집할 수 있는 복잡한 오브젝트 계층 구조를 생성할 수 있다.

 

* 개별적인 설정 변경:

모든 Prefab 인스턴스가 동일할 필요는 없다.

개별적인 Prefab 인스턴스에서 설정을 변경(override)할 수 있으며, 이를 통해 일부 인스턴스가 다른 인스턴스와 다르게 동작하도록 할 수 있다.

또한, Prefab의 변형(variants)을 생성하여 특정 설정 변경 세트를 그룹화할 수 있다.

 

* 런타임 인스턴스화:

씬 시작 시점에 존재하지 않았던 오브젝트를 런타임에서 인스턴스화하여 게임 내에서 필요한 시점에 특수 효과, 투사체, NPC 등을 생성할 수 있다.

 

Prefab 생성 방법

 

씬 내의 오브젝트를 프로젝트 창으로 드래그하여 Prefab으로 저장하면 된다.

이렇게 하면 해당 오브젝트의 구조, 컴포넌트, 고유 데이터가 그대로 유지되어 템플릿으로 저장되며, 이를 다시 씬에 드래그하거나 스크립트를 통해 런타임에서 인스턴스화할 수 있다.

 

Prefab 사용 예시

 

환경 에셋: 특정 종류의 나무를 레벨 내에서 여러 번 사용하는 경우

NPC : 특정 종류의 로봇이 게임 내 여러 레벨에서 등장하는 경우

투사체: 해적의 포탄이 발사할 때마다 포탄 프리팹을 인스턴스화하는 경우

플레이어의 주요 캐릭터: 각 레벨의 시작점에 플레이어 프리팹을 배치하는 경우.

 

Prefab 미리보기

 

Prefab을 선택하고 인스펙터에서 보면, 인스펙터의 에셋 미리보기 창에서 Prefab의 미리보기를 볼 수 있다.

만약 Prefab의 크기가 8MB 이하라면, 인터랙티브한 미리보기를 제공하며, 이를 통해 에셋 미리보기 창 내에서 Prefab을 회전시킬 수 있다.

만약 Prefab의 크기가 8MB를 초과하면, 기본적으로 에셋 미리보기는 정적인 미리보기를 보여주지만, 인터랙티브한 미리보기를 보려면 에셋 미리보기 창 내부를 클릭하면 된다.

 

프리팹 개수 제한 없음

 

Unity 프로젝트에서 프리팹의 개수에는 제한이 없고, 필요한 만큼 만들 수 있다.

하지만 각 프리팹이 복잡한 AI를 실행하거나 복잡한 충돌 영역을 가지고 있을 떄, 수천 개의 프리팹을 스폰하는 것은 컴퓨팅 성능에 영향을 줄 수 있다.

대부분의 경우, 2D 월드의 배경 타일처럼 많은 플리팹을 스폰하는 것은 문제가 되지 않는다.

그러나 처리 능력에 문제가 발생할 경우, 메시 및 메시 청크와 같은 대체 솔루션을 고려해야 한다.

따라서, 많은 오브젝트를 동시에 스폰하는 경우, 효율적인 방법으로 처리 능력을 관리하는 것이 중요하다.

 

(참고)  메시와 메시 청크

 

메시와 메시 청크는 게임 개발에서 중요한 개념이며, 특히 대규모 환경을 처리하거나 복잡한 3D 모델을 관리할 때 효율적인 방법을 제공한다.

 

메시(Mesh)란?

메시는 3D 공간에서 형태를 가진 객체를 표현하는 데 사용되는 정점(Vertex), 삼각형(Triangle), 그리고 이들을 연결하는 엣지(Edge)의 집합이다.

메시는 게임 내의 오브젝트, 캐릭터, 환경 요소 등을 구성하는 데 사용되며, 각 메시는 고유의 형태, 크기, 위치를 가질 수 있다.

Unity에서는 메시를 통해 3D 모델링 애플리케이션에서 생성된 FBX 또는 DAE 파일을 임포트하고, 이를 게임 내에서 사용할 수 있다.

 

메시 청크(Mesh Chunk)란?

메시 청크는 큰 규모의 3D 환경을 처리하기 위한 기법이다.

대규모 환경을 작은 조각으로 나누고, 이 조각들을 개별적으로 처리하는 방식이다.

이 방식은 특히 복잡한 지형이나 많은 수의 오브젝트를 포함하는 환경에서 유용하게 사용된다.

메시 청크를 사용하면, 플레이어의 위치에 따라 필요한 조각만 로드하고, 더 이상 필요하지 않은 조각은 언로드함으로써 메모리 사용량을 최적화할 수 있다.

이는 게임의 성능을 향상시키는 데 중요한 역할을 한다.