문제
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
에 내가 생성하려는 위젯의 클래스를 지정해줬다.