게임 개발/Unreal Engine 기본

Unreal Engine의 PrimaryAsset

지노윈 2025. 12. 29. 16:40
반응형

1. Primary Asset의 핵심 개념

언리얼 엔진의 에셋은 크게 두 가지로 분류됩니다.

  • Primary Asset (기본 에셋): 에셋 매니저가 PrimaryAssetId를 통해 식별할 수 있는 에셋입니다. (예: 아이템 데이터, 맵(Level), 캐릭터 설정 등)
  • Secondary Asset (보조 에셋): 기본 에셋에 의해 참조되는 일반 에셋입니다. (예: 텍스처, 메쉬, 사운드 등)

기본 에셋은 보조 에셋들을 포함하는 "묶음의 헤드" 역할을 하며, 에셋 매니저에게 "이 아이템 데이터(Primary)를 로드해"라고 명령하면, 그 안에 연결된 모델링과 텍스처(Secondary)들이 함께 로드되는 구조입니다.


2. 왜 Primary Asset을 사용하나요?

  1. 런타임 로딩 제어 (비동기 로딩): 게임 전체 데이터를 한꺼번에 로드하지 않고, 특정 스테이지나 인벤토리에 필요한 에셋만 골라서 메모리에 올릴 수 있습니다.
  2. 번들(Bundle) 관리: "Preview", "Client", "Server" 등 태그를 붙여 상황에 맞는 데이터만 선별적으로 로드할 수 있습니다.
  3. 청크(Chunk) 및 패키징: DLC나 패치 파일을 만들 때 어떤 에셋이 어떤 파일 묶음에 들어갈지 결정하는 기준이 됩니다.

3. 만드는 방법 (C++)

일반적인 클래스를 Primary Asset으로 만들려면 UPrimaryDataAsset을 상속받거나, GetPrimaryAssetId() 함수를 오버라이드해야 합니다.

#include "Engine/DataAsset.h"
#include "MyItemAsset.generated.h"

UCLASS(BlueprintType)
class MYPROJECT_API UMyItemAsset : public UPrimaryDataAsset
{
    GENERATED_BODY()

public:
    // 에셋 매니저가 이 에셋을 식별할 수 있게 고유 ID를 반환합니다.
    virtual FPrimaryAssetId GetPrimaryAssetId() const override
    {
        return FPrimaryAssetId("MyItemType", GetFName());
    }

    UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Item")
    FText ItemName;

    UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Item")
    TSoftObjectPtr<UStaticMesh> ItemMesh; // 비동기 로딩을 위해 소프트 포인터 사용
};

4. 에셋 매니저 설정

Primary Asset을 만든 후에는 엔진이 이를 인식할 수 있도록 Project Settings(프로젝트 세팅)에서 등록해줘야 합니다.

  1. Project Settings -> Asset Manager로 이동합니다.
  2. Primary Asset Types to Scan 항목에 배열을 추가합니다.
  3. 위 코드에서 설정한 Primary Asset Type (예: MyItemType)과 클래스(MyItemAsset)를 지정합니다.
  4. 에셋이 저장될 폴더 경로(Directories)를 추가합니다.

5. 요약 및 비교

특징 Secondary Asset (일반) Primary Asset (기본)
식별 방식 경로명 (Path) PrimaryAssetId (Type:Name)
로드 방식 하드 참조 시 자동 로드 에셋 매니저를 통한 명시적 로드
상속 클래스 UObject, UTexture 등 UPrimaryDataAsset, UWorld 등
용도 개별 리소스 데이터 데이터 관리 단위, 게임 데이터 정의

 

반응형