멈추지 않고 끈질기게

[Unreal] 언리얼 빌드 실패 - 에디터 전용 함수 본문

Unreal

[Unreal] 언리얼 빌드 실패 - 에디터 전용 함수

sam0308 2024. 7. 24. 11:53

※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다.

※ 해당 포스팅은 Unreal 5.3.1 버전을 기준으로 작성되었습니다.

 

 

0. 서론

 3차 프로젝트 중 실행 속도 개선을 위해 프로젝트를 빌드해보려고 했으나, 빌드 에러가 발생하였습니다. 당시에 해결하는 데 시간이 좀 걸렸기에 기록용으로 남기는 포스팅입니다. 첨부된 사진들은 프로젝트 당시에 캡쳐해두지 않아서, 임의의 프로젝트에서 재현한 모습입니다.

 

 

1. 빌드 에러 

 프로젝트 빌드를 시도해보았더니 다음과 같이 빌드 에러가 발생하였습니다. 빌드 설정에 문제가 있었나 싶어 에디터 설정도 들어가보고, 빌드 타입도 DebugGame부터 Shipping까지 모두 시도해보았지만 실패했습니다. Error 타입으로 나온 붉은 로그에는 Unknown Error라는 내용밖에 없어서 당혹스러웠지만, 위로 올라가며 모든 로그를 살펴본 결과 자세한 내용을 확인하려면 특정 경로를 확인하라는 메세지를 발견할 수 있었습니다.

 

사진 1. 언리얼 빌드 실패 로그

 

 

2. 원인 탐색

 해당 경로로 이동해보니 ''라는 파일이 있었습니다. 해당 파일을 열어보니 무수히 많은 로그가 있어 당황했으나, 우선 Error로 검색하여 찾아보기로 했습니다. 그러자 다음과 같은 한글로 적힌 로그를 찾을 수 있었습니다. 에디터의 언어설정은 영어인데, 해당 로그는 로컬 언어를 따라가는건지 한글로 나와서 내용을 확인해보았습니다.

사진 2. Log 파일에서 찾은 에러의 원인

 

 

 보아하니 GetActorLabel()이라는 함수가 문제 것으로 보였습니다. 에디터에서 실행할 때는 아무 문제없이 동작하던 함수인데 뭐가 문제인가 싶었지만, 우선 범인을 찾았으니 조사해보기로 했습니다. 검색해보니 해당 함수는 에디터 환경에서만 사용할 수 있는 함수였습니다.

https://forums.unrealengine.com/t/getactorlabel-getname-getactornameorlabel/630443

 

GetActorLabel & GetName & GetActorNameOrLabel

I know the GetActorLabel function is to get the actor’s Item Label, and the GetName function is to get the ID Name. What about the GetActorNameOrLabel function? All I get when I try to use it is the Item Label. My question is what is the difference betwe

forums.unrealengine.com

 

 

 Visual Studio에서 F12를 누르고 선언부를 확인해보니, ActorLabel이라는 변수는 WITH_EDITORONLY_DATA라는 전처리 구문 안에 정의된 변수였습니다. 즉, 빌드 환경에서는 아예 정의되어 있지 않은 변수인데 해당 값을 반환하는 함수가 코드에 포함되어 있으니 빌드 시 에러를 발생시키는 것이었습니다. 찾아보니 GetNameOrLabel()이라는 빌드 환경에서도 사용할 수 있는 동일한 내용을 수행하는 함수가 존재하였고, 해당 함수로 바꾸고 나서 빌드가 정상적으로 진행되는 모습을 확인할 수 있었습니다.

 

사진 2. ActorLabel 선언부

 

 

3. 정리

 이번 빌드 에러 해결 과정을 정리하자면 다음과 같습니다.

  1. 빌드 에러 발생 시, 위로 올라가며 특정 경로가 적힌 로그를 찾는다.
  2. 1에서 찾은 경로로 이동하여 로그 파일을 찾은 뒤 연다.
  3. 해당 파일에서 Error로 검색하여 한글로 된 로그를 찾는다.
  4. 해당 로그에 적힌 이슈를 해결한다(이번 이슈의 경우, 에디터 전용 함수 사용)

 처음에 Error 로그에서는 Unknown Error라고만 나오며 아무 정보를 주지 않아 포기하려고 했으나, 포기하지 않고 빌드 관련 로그 파일 경로를 찾은 덕분에 이슈를 해결할 수 있었습니다. 보통 로그 양이 워낙 많아 임의로 추가한 로그만 검색하여 찾아보는 경우가 많았는데, 이런 이슈가 있을 때는 에디터에서 출력하는 로그들도 꼼꼼하게 확인하도록 해야겠습니다.