팀프로젝트 | EDAssetManager 테스트, 동기화 매니저 만들기

Kyu_·2026년 4월 7일

20주차

목록 보기
1/4

EDAssetManager 테스트

StartInitialLoading 테스트

/**
 * Super::StartInitialLoading()
 * Super호출해서 DefaultEngine.ini or Project Settings의 Primary Asset 타입/경로 읽기
 */
void UEDAssetManager::StartInitialLoading()
{
	Super::StartInitialLoading();

	// TODO : 프로젝트 커스텀 초기화 작성
	UE_LOG(LogTemp, Log, TEXT("[EDAssetManager] StartInitialLoading 실행완료"));
}
  • 엔진자체가 실행될때 딱한번 호출됨
  • 에디터가 실행될때 로그 출력

동기로드 테스트

void ATestActor::BeginPlay()
{
    Super::BeginPlay();

    // Singleton 검증
    UEDAssetManager& AM = UEDAssetManager::Get();
    UE_LOG(LogTemp, Log, TEXT("AssetManager 타입: %s"), *AM.GetClass()->GetName());


    FSoftObjectPath TestPath(TEXT("/Game/ED/Levels/NewDataAsset.NewDataAsset"));
    TArray<FSoftObjectPath> Paths = { TestPath };
    TArray<UObject*> OutAssets;

    AM.LoadAssetsSync(Paths, OutAssets);

    for (UObject* Obj : OutAssets)
    {
        if (Obj)
            UE_LOG(LogTemp, Log, TEXT("동기 로드 성공: %s"), *Obj->GetName());
        else
            UE_LOG(LogTemp, Warning, TEXT("동기 로드 실패"));
    }
}

비동기로드 테스트

// .h
TSharedPtr<FStreamableHandle> AsyncHandle;

void OnAsyncLoaded();

// .cpp
void AAssetManagerTestActor::BeginPlay()
{
	Super::BeginPlay();

	UEDAssetManager& AM = UEDAssetManager::Get();
	UE_LOG(LogTemp, Log, TEXT("AssetManager 타입: %s"), *AM.GetClass()->GetName());

	FSoftObjectPath TestPath(TEXT("/Game/ED/Levels/NewDataAsset.NewDataAsset"));
	AsyncHandle = UEDAssetManager::Get().LoadAssetAsync(
		TestPath,
		FStreamableDelegate::CreateUObject(this, &AAssetManagerTestActor::OnAsyncLoaded)
	);
}

void AAssetManagerTestActor::OnAsyncLoaded()
{
	UE_LOG(LogTemp, Log, TEXT("비동기 로드 콜백 실행 완료"));

	if (AsyncHandle.IsValid() && AsyncHandle->HasLoadCompleted())
	{
		UObject* Loaded = AsyncHandle->GetLoadedAsset();
		UE_LOG(LogTemp, Log, TEXT("로드된 에셋: %s"), Loaded ? *Loaded->GetName() : TEXT("nullptr"));
	}
}
  • 둘다 테스트 완

StartUpJob

Lyra에서 보고서 사용하려고 했었음
용도는 게임 시작시점에 실행할 작업들을 구조체로 묶어서 관리할 수 있었는데 보통 게임 설정을 한다고 한다. 공통적으로 사용하는 GameplayEffect를 정의하는데 공부하면 할 수록 StartUpJob이 너무 오버엔지니어링인거같아서 우선은 뒤로 미뤄야 할 것같다.

동기화 매니저 만들기

게임 시작시 필요한 모든 데이터 에셋 ID목록을 수집하고, UEDAssetManager의 비동기 로드를 호출하고, 완료 시 각 게임 시스템(캐릭터, AI, GAS등)에 데이터를 배포하는 역할

0개의 댓글