728x90

문제

Editor, Standalone, PIE에서는 게임이 잘 작동되었으나 패키지된 게임에서 게임을 켜도 검은 화면만 나오고 응답없음이 되는 문제가 발생했다. 해결을 위해 /게임명/Saved/Logs/게임명.log 파일을 열어봐도 초기화나 시작 관련 로그만 쭉 적혀있고 중간에 툭 끊겨있어 어디서 오류가 발생한지 알 수가 없었다.

 

결국 지금 해놨던 것들은 백업해두고 깃허브에 저장해뒀던, 최근 작동이 잘되었던 버전부터 시작해서 하나 하나 추가하는 방식으로 원인을 찾았다.

 

원인

GameInstance를 상속받은 새로운 클래스 (ex: UCustomGameInstance)에서 UserWidget을 생성하려는 의도. 그러려면 엔진이 어떤 위젯을 생성할지 알아야 하므로 코드상에서 지정해줘야겠다고 생각했다.

 

따라서 헤더 파일에 TSubclassOf<class UUserWidget> WidgetClass를 추가하고,

UCustomGameInstance 생성자에서 ConstructorHelpers::FClassFinder<UUserWidget>을 사용해서 할당했다.

 

하지만 생성자가 에디터 상의 플레이에서는 잘 되었으나 패키지된 게임에서 제대로 작동되지 않았던 것 같다. 아니면 부모 클래스의 생성자 호출이 제대로 되지 않았던 건지... 예전에 UE4에서는 잘되었던 것 같은데, 5에서는 안된다.

 

해결

의도는 변함이 없고, 방법을 바꿨다.

코드상에서 지정해주는 것이 아니라 블루프린트에서 지정해주는 것으로 우회했다.

따라서 헤더파일에서 선언을 다음과 같이 변경한다.
UPROPERTY(EditDefaultsOnly)
TSubclassOf<class UUserWidget> WidgetClass;

 

또, UCustomGameInstance로부터 BP_CustomGameInstance라는 Blueprint Class를 만들어서

블루프린트 에디터상에서 WidgetClass에 내가 생성하려는 위젯의 클래스를 지정해줬다.

728x90