본문 바로가기

Unreal

[Unreal] Lyra 프로젝트 분석 - 01. AssetManager

 

Asset Manager은 프라이머리 에셋에 대하여 로딩과 언로딩을 한다. (프라이머리에셋에 대해서는 나중에)

 

핵심 함수

SynchronousLoadAsset(const FSoftObjectPath& ..)

동기식으로 로딩한다.

 

동기: 로딩을 다 하기 전까지 다른 것을 하지 않지만 빠르다. 로딩화면 때 사용됨

비동기: 로딩을 하면서 다른 작업과 같이 진행하기 때문에 게임플레이 중 로딩이 필요할 때 사용됨

 

이 함수는 동기식 로딩 때 문제가 생기는 지 찾기 위해 따로 만든 함수이다. 

결국 GetStreamableManager().LoadSynchronous() 함수를 래핑했는데,

로딩에 걸리는 시간을 LogTimePtr에 저장하는 것만 추가했을 뿐이다.

 

SynchronousLoadAsset(const FSoftObjectPath& ..)

매개변수의 SoftObjectPath는 로딩할 파일의 경로다.

모든 파일을 메모리에 들고 있기엔 너무 무겁기 때문에 경로만으로 로딩할 수 있다.

 

 

 

Asset: 블루프린트, 사운드..

StaticClass: 메타데이터(리플렉션)

ㄴ런타임단계에서 클래스의 정보를 얻을 수 있음 (C#특성)
TSubClassOf: 특정클래스의 서브클래스의 타입 정보

ㄴ특정 클래스를 상속받은 클래스만 넣을 수 있도록 래핑한 클래스

CDO: 클래스의 기본 인스턴스

 

 

 

AssetManager은 엔진이 켜지기 전부터 코드가 실행된다. 

이 타이밍은 멀티스레드가 안전하지 않기 때문에 LoadedAssets에 저장할 때 한 개씩만 저장하도록 Lock을 건다.

저장할 오브젝트에 락을 걸어 열쇠를 가지고 있는 사람만 방에 들어갈 수 있듯이 한번에 한개의 오브젝트만 저장한다.

 

LoadedAssets에 저장하는 이유는 에셋들이 언리얼 엔진 내부에서 가비지 컬렉션으로 지워지는 것을 방지하기 위함이다.