강참조와 약참조, TSoftObjectPtr

김지윤·2024년 11월 12일
0

UE5

목록 보기
3/16

ItemManagerSubsystem을 선언해 아이템 관련 정보를 싱글톤으로 가져오게끔 구현했다.
블루프린트까지 만들 필요는 없다고 생각해 DataTable을 파일 경로를 통해 할당해주었다.
여기서 강참조로 할당하게 될 경우 게임 시작과 동시에 로드하게 되면서 많은 시간이 걸리게 될 것이고, 당장 사용하지 않는 상황에도 메모리를 차지하고 있게 된다.
그 때 쓰는 게 TSoftObjectPtr이다.
필요할 때 메모리에 로드해 사용할 수 있어 메모리 관리에도 효율적이고 과부하도 피할 수 있다.

TSoftObjectPtr<UDataTable> ItemDataTable
    = TSoftObjectPtr<UDataTable>(FSoftObjectPath(TEXT("에셋 경로")));

이렇게 DataTable을 선언, 경로로 참조했다.

UDataTable* UItemManagerSubsystem::GetItemDataTable()
{
    if (ItemDataTable.IsValid())
        return ItemDataTable.Get();

    return ItemDataTable.LoadSynchronous();
}

필요할 때 GetItemDataTable을 호출해 사용한다.
번거로운 방법이지만 DataTable은 가진 변수가 많아 꼭 약참조로 비동기로드해주는 게 좋아보인다.
번거로움에도 DataTable을 사용하는 이유는 엑셀과 연동도 가능하고, 기획자가 언리얼 이해도가 조금만 있어도 빠르고 쉽게 편집이 가능하기 때문이다.

여기부턴 구현 중 겪은 오류와 해결에 대한 내용이다.

  • 프로젝트 실행 시 75%에서 멈추는 현상
    DataTable 할당을 헤더파일에서 바로 하지 않고 생성자에서 시도했는데, 경로를 잘못 적어 생성자에 오류가 있는 상황이었다. 이 때 Local Windows Debugger로 프로젝트를 실행하면 75%에서 멈추게 된다.
    프로젝트 파일로 직접 실행하면 또 문제 없이 실행돼서 이유를 찾는 데에 시간이 조금 걸렸다.

  • 로컬 윈도우 디버거로 실행할 수 없는 현상

    75%에서 멈출 때 리빌드를 시도하면 이렇게 되는 것 같다.

해결하려면 생성자 오류를 수정하고, 리빌드 과정을 거친 뒤

시작 프로젝트 구성으로 가서 자신의 프로젝트를 선택해주면 된다.

profile
공부한 거 시간 날 때 작성하는 곳

0개의 댓글