Can not invoke OnRequestDefaultDataInterface. Delegate was never set.

프롬·2021년 12월 21일
0

에디터에서는 상관 없으나, Launch 혹은 Packaging 할 때 일어난 문제이다.
협업 툴을 GITHUB에서 Perforce로 바꾸면서,
마켓 플레이스 플러그인인 Weather System을 프로젝트 모듈로 바꾸었는데(원래는 각각 다운 받아야하지만 공개 프로젝트는 아니므로..)
이 때문에 문제가 생긴거라고 생각했다.
딱 이렇다할 단서는 없었지만, 협업툴을 옮기면서 에러가 많이 났고
log를 살펴보았을 때, weather system이 init되었을 때 에러가 났기 때문이다.

그래서 첫번째로, dependency를 살펴보았으나,
예상과 달리 weathersystem의 build.cs를 살펴보니 public dependency에 niagara가 잘 선언되어있어서 원인은 아니었다.

두번쨰로, UBT(Unreal Build Tool)의 초기화 순서때문인가 생각해보았다.
언리얼은 모듈의 초기화 태그에 의해서 순서가 정해지게 되는데
따라서 Delegate가 되지 않았다는 말은 Niagara와 WeatherSystem이 순서대로 호출되지 않아서 생기는 문제라고 판단했다.

		"Name": "WeatherSystem",
		"Type": "Runtime",
		"LoadingPhase": "Default",
		"WhitelistPlatforms": [
			"Win64"
		]

아쉽게도 LoadingPhase가 Default로 설정되어있었고 다른 것으로 변경해도 결과가 달라지지 않았다.

또 혹시 몰라서 메인 프로젝트 build.cs 파일에 Niagara를 추가했다.

PublicDependencyModuleNames.AddRange(new string[] { "WeatherSystem", "Core", "CoreUObject", "Engine", "InputCore", "Niagara"});

그러나 마찬가지로 Never set만을 내뿜을 뿐이었다..

결국 과제 시간을 놓치고 다음날...
다시 구글을 검색해보니 나이아가라의 이미터 중 GPU로 되어있는 걸 CPU-Sim으로 바꾸면 된다길래
해봤는데..
작동 되었다. 어이가 없었다.
정말 생각지도 못한 부분에서 에러가 날수도 있구나 생각했다.
그렇지만 버그를 곰곰하게 생각하면서 UBT가 작동하는 방법이나, 초기화 순서가 중요하다는 점
나아가서 build.cs/target.cs/uplugin/uproject가 어떤 식으로 작동되는지, 무슨 의미인지 생각하는 값진 시간이었다.
이틀 동안 4시간 자면서 얻어낸 결과지만..(사실 이거말고도 패키징 버그 1개, 런타임 버그 2개를 해결해야했다)

profile
경희대 소프트웨어융합학과 게임컨텐츠트랙 Web / Game Graphics / 딥러닝

0개의 댓글