반응형
1. Primary Asset의 핵심 개념
언리얼 엔진의 에셋은 크게 두 가지로 분류됩니다.
- Primary Asset (기본 에셋): 에셋 매니저가 PrimaryAssetId를 통해 식별할 수 있는 에셋입니다. (예: 아이템 데이터, 맵(Level), 캐릭터 설정 등)
- Secondary Asset (보조 에셋): 기본 에셋에 의해 참조되는 일반 에셋입니다. (예: 텍스처, 메쉬, 사운드 등)
기본 에셋은 보조 에셋들을 포함하는 "묶음의 헤드" 역할을 하며, 에셋 매니저에게 "이 아이템 데이터(Primary)를 로드해"라고 명령하면, 그 안에 연결된 모델링과 텍스처(Secondary)들이 함께 로드되는 구조입니다.
2. 왜 Primary Asset을 사용하나요?
- 런타임 로딩 제어 (비동기 로딩): 게임 전체 데이터를 한꺼번에 로드하지 않고, 특정 스테이지나 인벤토리에 필요한 에셋만 골라서 메모리에 올릴 수 있습니다.
- 번들(Bundle) 관리: "Preview", "Client", "Server" 등 태그를 붙여 상황에 맞는 데이터만 선별적으로 로드할 수 있습니다.
- 청크(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(프로젝트 세팅)에서 등록해줘야 합니다.
- Project Settings -> Asset Manager로 이동합니다.
- Primary Asset Types to Scan 항목에 배열을 추가합니다.
- 위 코드에서 설정한 Primary Asset Type (예: MyItemType)과 클래스(MyItemAsset)를 지정합니다.
- 에셋이 저장될 폴더 경로(Directories)를 추가합니다.
5. 요약 및 비교
| 특징 | Secondary Asset (일반) | Primary Asset (기본) |
| 식별 방식 | 경로명 (Path) | PrimaryAssetId (Type:Name) |
| 로드 방식 | 하드 참조 시 자동 로드 | 에셋 매니저를 통한 명시적 로드 |
| 상속 클래스 | UObject, UTexture 등 | UPrimaryDataAsset, UWorld 등 |
| 용도 | 개별 리소스 데이터 | 데이터 관리 단위, 게임 데이터 정의 |
반응형
'게임 개발 > Unreal Engine 기본' 카테고리의 다른 글
| unreal engine assertion들 check, ensure, verify 등등... (0) | 2025.12.30 |
|---|---|
| TObjectPtr를 사용하는 이유 (0) | 2025.12.30 |
| PRAGMA_DISABLE_OPTIMIZATION과 PRAGMA_ENABLE_OPTIMIZATION 매크로 (0) | 2025.12.29 |
| StaticClass, TSubclassOf, CDO (0) | 2025.12.29 |
| 언리얼 엔진의 메인 스레드 구조 및 설계 철학 (1) | 2025.12.09 |