728x90

문제

기존의 Pawn 클래스가 갖고 있던 필드를 리팩토링을 위해 분리하려고 했다. Actor Component를 새롭게 생성해 이에 대한 포인터를 갖는 식으로 변경했다.

그러나 CreateDefaultSubobject<컴포넌트이름>(TEXT("컴포넌트이름")); 으로 생성을 해도 안되어 nullptr로 나오거나 UPROPERTYVisibleAnywhere로 해도 Blueprint editor에서 details가 보이지 않는 문제가 발생했다.

VisibleAnywhere지만 Details창에 아무것도 나오지 않는다.

해결

블루프린트 에디터에서 Reparent Blueprint해서 다른 상위 클래스(ex: APawn)으로 변경한 뒤, 원래 클래스(ex: APawn을 상속받은 원래 나의 클래스 UGoKart)로 바꾼다.

File 탭에서 Reparent Blueprint

 

멀티플레이 게임 개발 강의 듣다가 발생한 문제인데, 이렇게 해서 위의 문제는 해결했지만 플레이 시 클라이언트에서 서버의 Pawn이 생성안되는 버그가 발생했다. 코드를 강의와 똑같이 해도 해결 안돼서 그냥 블루프린트 클래스를 지우고 새로 만들었더니 해결되었다. 버그때문에 꼬였나보다...

 

2022.09.01 수정

Reparent를 하면 기존에 설정해놨던 값들이 사라질 수 있기 때문에 다른 방법이 필요했다.

C++에서 CreateDefaultSubobject<컴포넌트이름>(TEXT("컴포넌트이름"));으로 생성했던 변수의 이름을 IDE의 Refactor 기능으로 바꿔줬다. 예를들면
FollowingCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FollowingCamera")); 였던 것을
FollowCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FollowCamera")); 로 바꿨다.

이후 엔진을 끄고 다시 컴파일 한 후 켜니 제대로 컴포넌트가 생성되고 정상작동됐다.

 

관련 링크

더보기

 

728x90