ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1067)
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (180)
      • Unreal (69)
      • Unity (100)
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (235)
      • 공통 (21)
      • 네트워크 (44)
      • OS & 하드웨어 (55)
      • 자료구조 & 알고리즘 (98)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (346)
      • C++ (167)
      • C# (88)
      • Java (9)
      • Python (33)
      • SQL (30)
      • JavaScript (8)
      • React (7)
    • 그 외 (9)
      • Math (5)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • 알고리즘
  • 프로그래머스
  • 백준
  • SQL
  • C++
  • 언리얼
  • 파이썬
  • 유니티
  • 그래픽스
  • 티스토리챌린지
  • 함수
  • 포인터
  • Unity
  • 오블완
  • C
  • c#
  • string
  • 클래스
  • 배열
  • 문자열

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

게임엔진/Unreal

[Unreal] 비동기 에셋 로딩

2023. 12. 4. 09:22

UE4에서 애셋 비동기 로딩을 쉽게 하기 위한 신규시스템이 도입되었다. 데이터 로드 및 참조에 사용되는 방법은 일반적으로 두가지가 있다.

FSoftObectPath와 TSoftObjectPtr

FSoftObjectPath는 애셋의 전체이름이 저장된 스트링이있는 구조체이다.
애셋의 참조 정보와 생성 메소드들을 포함한다. 에디터에서는 UObject처럼 표시된다.

TSoftObjectPtr은 FsoftObjectPath를 감싸는 TWeakObjectPtr 이다.
에디터 UI에서 특정 클래스만 선택되게끔 제한하도록 하는 역할. 블루프린트에서 애셋의 SoftReference로 표시

애셋 레지스트리와 오브젝트 라이브러리

애셋 레지스트리는 애셋에 대한 메타데이터를 저장하여, 검색 및 질의를 가능하게 한다. 에디터에서는 보통 콘텐츠 브라우저에 정보를 표시하기 위해 사용. 게임에서는 현재 로드되지 않은 게임 플레이 애셋에 대한 메타데이터 질의를 하는 데도 사용 가능. 프로퍼티에 ASsetRegistrySearchable 태그를 추가해야 한다.

 

오브젝트 라이브러리는 로드되지 않은 애셋 그룹을 가지고 작업할 때 사용된다. 로드된 오브젝트와 로드되지 않은 오브젝트의 경우 공유 베이스 클래스를 상속한다. 폴더 경로를 추가하면 하위 폴더의 모든 애셋이 추가된다.

StreamableManager 와 비동기 로딩

FStreamableManager는 비동기 로딩을 지원하는 매니저 클래스이다. FStreamableManager를 싱글톤으로 생성하고, FSoftObjectPath를 받아와서 로드를 한다. SyncronusLoad는 동기 로딩으로 메인쓰레드를 오래 잡아둘수도 있다. RequestAsyncLoad를 사용하면 애셋을 비동기로 로드한 다음 델리게이트를 지정하여 호출할수 있게 한다.

void UGameCheatManager::GrantItems()
{
       TArray<FSoftObjectPath> ItemsToStream;
       FStreamableManager& Streamable = UGameGlobals::Get().StreamableManager;
       for(int32 i = 0; i < ItemList.Num(); ++i)
       {
              ItemsToStream.AddUnique(ItemList[i].ToStringReference());
       }
       Streamable.RequestAsyncLoad(ItemsToStream, FStreamableDelegate::CreateUObject(this, &UGameCheatManager::GrantItemsDeferred));
}

void UGameCheatManager::GrantItemsDeferred()
{
       for(int32 i = 0; i < ItemList.Num(); ++i)
       {
              UGameItemData* ItemData = ItemList[i].Get();
              if(ItemData)
              {
                     MyPC->GrantItem(ItemData);
              }
       }
}

 

[언리얼 엔진] 비동기 애셋 로딩 (tistory.com)

저작자표시 (새창열림)

'게임엔진 > Unreal' 카테고리의 다른 글

[Unreal] C++ 변환할 수 없습니다 오류 해결  (0) 2024.01.16
[Unreal] Reflection (리플렉션)  (0) 2023.12.04
[Unreal] 엔진에서 제공하는 데미지 라이브러리  (0) 2023.11.15
[Unreal] 미니맵 및 캐릭터 위치 표시  (0) 2023.11.15
[Unreal] Programming Subsystem (프로그래밍 서브시스템)  (0) 2023.11.14
    '게임엔진/Unreal' 카테고리의 다른 글
    • [Unreal] C++ 변환할 수 없습니다 오류 해결
    • [Unreal] Reflection (리플렉션)
    • [Unreal] 엔진에서 제공하는 데미지 라이브러리
    • [Unreal] 미니맵 및 캐릭터 위치 표시
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바