포스트

[UE5] C++ 클래스 이름 변경 후 생긴 문제들과 해결 방법

웬만하면 이름 바꾸지 말자

시작하며

UE5 를 공부하며 아무 생각 없이 프로젝트 이름을 project1 으로 지었고 자연스럽게 캐릭터 클래스도 project1Character 가 되었다.

그런데 개발을 하다 보니 기본 캐릭터 클래스에서 상속하여 여러 클래스들을 만들 일이 많겠다고 느꼈고, 이름 역시 BaseCharacter 같은 게 더 적절하겠다고 생각했다.

그 결과 너무나 안이하게도 project1Charcter 의 이름을 BaseCharacter 로 바꾸려고 했고, 거하게 삽질을 하고야 말았다. 다시 바보짓을 안하기 위해 그 과정을 기록해 두고자 한다.

첫 번째 시도

처음엔 그냥 비주얼스튜디오에서 일괄 변경한 다음 자손 블루프린트 클래스는 에디터에서 부모클래스 재설정 해주면 되겠거니 하고 생각했다.

제일 먼저 소스 코드에서 Ctrl + H 를 이용해 project1CharacterBaseCharacter 로 변경했고, .vs, Binaries, Intermediate, project1.sln 을 삭제한 후 프로젝트 파일을 재생성하고 빌드했다.

첫번째 문제 - 부모 클래스 변경 불능

빌드는 문제 없이 됐으나 원래 project1Character 을 상속해 만든 BP_project1Character 의 부모 클래스를 BaseCharacter 로 바꾸려고 보니 변경이 안 되는 문제에 직면했다…

부모 클래스는 없음 이라고 표기되었고, BaseCharacter 뿐만 아니라 ActorPawn 등 다른 언리얼 클래스도 선택지에 뜨지 않아 변경이 불가능했다.

해결 - 클래스 리다이렉트

안이하게 되겠거니 했던 게 안되니 당황스러웠지만 검색을 해 보니 다음과 같은 해결책이 있었다.

Config/DefaultEngine.ini 파일을 열고, 맨 끝에 다음 리다이렉트 코드를 추가한다.

1
2
[CoreRedirects]
+ClassRedirects=(OldName="project1Character", NewName="BaseCharacter")

그리고 다시 빌드하면 다음과 같이 부모 클래스가 BaseCharacter 로 리다이렉트 된 것을 볼 수 있다.

리다이렉트 코드를 계속 남겨두긴 싫으니 이 상태에서 블루프린트 클래스를 저장 하고, Config/DefaultEngine.ini 파일 맨 끝에 추가했던 리다이렉트 코드를 지운 후 다시 빌드하면 블루프린트 클래스의 부모 관련 문제는 해결할 수 있다.

남은 문제

위 방법으로 블루프린트 클래스에서 발생하는 문제는 해결했지만, 월드에 배치한 캐릭터들에서 문제가 발생했다.

이 문제의 해결 방법은 찾지 못했고 결국 문제가 발생한 액터를 지운 후 수정한 블루프린트 클래스를 다시 배치하는 수밖에 없었다.

나의 경우 배치했던 수가 많지 않아 다행이었지만, 맵 곳곳에 잔뜩 배치해 둔 액터였다면 정말 막막했을 것이다.

결론

클래스 이름 변경 웬만하면 하지 말자.

애초에 처음부터 이름을 잘 짓는게 좋겠지만 부득이하게 바꿔야 할 때는 새 클래스를 만들고 기존 클래스의 내용을 복붙한 뒤 의존 관계를 해결하는 것이 훨씬 바람직한 방법이라고 느꼈다.

© w9865t. All Rights Reserved.

인기 태그