문제
기존의 Pawn
클래스가 갖고 있던 필드를 리팩토링을 위해 분리하려고 했다. Actor Component
를 새롭게 생성해 이에 대한 포인터를 갖는 식으로 변경했다.
그러나 CreateDefaultSubobject<컴포넌트이름>(TEXT("컴포넌트이름"));
으로 생성을 해도 안되어 nullptr
로 나오거나 UPROPERTY
를 VisibleAnywhere
로 해도 Blueprint editor에서 details가 보이지 않는 문제가 발생했다.
해결
블루프린트 에디터에서 Reparent Blueprint
해서 다른 상위 클래스(ex: APawn
)으로 변경한 뒤, 원래 클래스(ex: APawn
을 상속받은 원래 나의 클래스 UGoKart
)로 바꾼다.
멀티플레이 게임 개발 강의 듣다가 발생한 문제인데, 이렇게 해서 위의 문제는 해결했지만 플레이 시 클라이언트에서 서버의 Pawn
이 생성안되는 버그가 발생했다. 코드를 강의와 똑같이 해도 해결 안돼서 그냥 블루프린트 클래스를 지우고 새로 만들었더니 해결되었다. 버그때문에 꼬였나보다...
2022.09.01 수정
Reparent를 하면 기존에 설정해놨던 값들이 사라질 수 있기 때문에 다른 방법이 필요했다.
C++에서 CreateDefaultSubobject<컴포넌트이름>(TEXT("컴포넌트이름"));
으로 생성했던 변수의 이름을 IDE의 Refactor 기능으로 바꿔줬다. 예를들면 FollowingCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FollowingCamera"));
였던 것을 FollowCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FollowCamera"));
로 바꿨다.
이후 엔진을 끄고 다시 컴파일 한 후 켜니 제대로 컴포넌트가 생성되고 정상작동됐다.
관련 링크
본 문제에 대한 직접적인 관련이 있는 링크
다른 비슷한 문제. 블루프린트 에디터 자체가 이런 비슷한 버그가 좀 있는듯.
https://forums.unrealengine.com/t/inherited-component-details-not-showing-in-blueprint/42671