언리얼 에디터에서 부모를 맞게 할당해도 에디터를 다시 열면 Blueprint의 부모 클래스가 계속 바뀌는 버그가 발생했다. 부모 클래스 할당이 사라지는게 아닌 특정 이름의 클래스의 이름으로 바뀌어서 뭔가 설정이 잘못됬음을 의심했다. 결과적으로 말하면, DefaultEngine.ini의 CoreRedirects 부분에 문제가 있었던 것이었다.

 

 

BP의 부모 클래스가 계속 바뀌는 버그


 

 

문제상황

 

언리얼 에디터에서 부모를 맞게 할당해도 에디터를 다시 열면 Blueprint의 부모 클래스가 계속 바뀌는 버그가 발생했다.

 

 

 


 

 

확인해야 될 사항들

 

1.  DefaultEngine.ini 내의 [CoreRedirects] 섹션

프로젝트 설정 파일(DefaultEngine.ini)에서 [CoreRedirects] 섹션을 확인한다. 여기서 부모 클래스를 변경하는 리디렉션이 설정되어 있을 수 있습니다

 

 

2. 언리얼 엔진이 충돌 후 C++ 부모 클래스를 찾지 못하는 경우

언리얼 엔진이 충돌 후 C++ 부모 클래스를 찾지 못하는 경우가 있다. C++ 파일의 변경 사항이 적용되지 않아 발생할 수 있는 문제이므로 언리얼 에디터에서 Update VisualStudio 를 눌러 업데이트하고 다시 빌드해보자. 그래도 안 된다면 컴파일이 꼬였을 수도 있으니 파일들을 지우고 Generate Visual Studio를 한 뒤 다시 빌드해보자.

 


 

 

해결방안

 

첫번째로 의심한 DefaultEngine.ini 내의 [CoreRedirects] 섹션에서 문제가 있었다.

 

TDUW_InventroyMenu가 TDUW_Inventroy와 매칭되어 있다. 과거에 클래스 이름을 변경할 때 VisualStudio에서 문제가 생겼던것 같다. 

 

해당 클래스는 이름을 변경하기 전 작업한 부분이 거의 없었기 때문에 CoreRedirects 섹션에서 해당 부분을 삭제했다.

 

+ 나중에 CoreRedirects 에 쌓인 것들을 전부 지웠다. 이유는 아래서 설명.


 

 

참고)  언리얼 엔진 CoreRedirects 삭제 가능 여부

 

언리얼 엔진 CoreRedirects는 로드 시간에 클래스, 열거형, 함수, 패키지, 프로퍼티, 구조체를 리매핑하는 기능이다. 이는 기존 애셋을 새로운 애셋으로 변경할 때 데이터 손실을 방지하기 위해 사용한다.

CoreRedirects는 다음과 같은 경우에 삭제할 수 있다.

  • 영향을 받는 애셋과 이를 사용하는 애셋이 모두 다시 컴파일 및 다시 저장된 경우
  • 더 이상 사용되지 않는 애셋을 참조하는 경우
  • 프로젝트를 정리하고 최적화하기 위해 리디렉트를 제거하려는 경우

 

CoreRedirects를 삭제하기 전에 다음 사항을 확인해야 한다.

  • 모든 관련 애셋이 다시 컴파일 및 다시 저장되었는지 확인한다.
  • 삭제하려는 리디렉트가 더 이상 사용되지 않는지 확인한다.
  • 프로젝트 백업을 만들어 삭제 후 문제가 발생할 경우 롤백할 수 있도록 다.

 

 

작업을 하면 클래스 이름이나 애셋 이름을 변경하는 이름은 분명히 발생한다. 코드 리팩토링은 필수적이다.

 

이름을 변경하면 Dependency가 걸려있는 부분들에서 문제가 발생할 수 있다. 리빌드가 필요할 수도 있다. 그리고 Blueprint에서 작업한 부분들이 빨갛게 변하며 문제가 생긴다. 이 때, Refresh로 다시 잡거나 삭제하고 다시 만들어주면 된다.

 

이름이 변경된 경우, 위의 내가 한 것처럼 CoreRedirects를 쌓아두지말고 지우고 에러가 발생한 부분을 잡고 작업하는게 좋다. 필자도 이 문제를 발견한 이후 CoreRedircts을 전부 지우고 문제가 되는 부분들을 수정했다.