본문 바로가기

Unreal

[Unreal] 에셋이 있으면 가져오기

4.25 ver


[내용]

디렉토리에 에셋이 있을경우 가져와서 셋팅하거나 사용하고, 없으면 아무 작업을 하지 않는다.

 

#include "LoadMeshActor.h"

#include "Components/StaticMeshComponent.h"
#include "Misc/Paths.h"

ALoadMeshActor::ALoadMeshActor()
{
	// UStaticMeshComponent 컴포넌트를 생성
	Mesh = CreateDefaultSubobject<UStaticMeshComponent>("Mesh");
	// RootComponent 를 생성한 Mesh로 설정
	RootComponent = Mesh;
}

void ALoadMeshActor::BeginPlay()
{
	Super::BeginPlay();
	SetMesh();
}

void ALoadMeshActor::SetMesh()
{
	// 가져올 에셋 이름
	FString str = L"Cube";

	// 탐색할 경로
	FString filePath = FPaths::Combine(*FPaths::ProjectContentDir(), *FString("StaticMesh/")) + str + L".uasset";

	UE_LOG(LogTemp, Log, L"FPaths::ProjectContentDir--------%s", *filePath);

	// 에셋이 있는지 검사
	if (FPaths::FileExists(filePath) == false)
		return;

	// 에셋이 있다면 레퍼런스 경로를 FString으로 재조립
	FString meshReferece = FString::Printf(L"StaticMesh'/Game/StaticMesh/%s.%s'", *str, *str);

	// 레퍼런스 경로를 통해 에셋 로드
	UStaticMesh* mesh = LoadObject<UStaticMesh>(NULL, *meshReferece, NULL, LOAD_None, NULL);

	// 잘 로드 되었는지 확인
	if (mesh != nullptr)
	{
		UE_LOG(LogTemp, Log, L"Mesh In!!!!");
		// 에셋 적용
		Mesh->SetStaticMesh(mesh);
	}

}

 

[결과물]

StaticMesh 디렉토리에 Cube가 있다면 메시가 설정됨.

 

하지만 그림과 같이 Cube를 찾을수 없다면 아무 메시가 할당되지 않음.