본문 바로가기
공부/Unreal Engine 5

[언리얼5] 프로퍼티 동기화(C++ & BP)

by MY블로그 2024. 4. 5.

C++코드로 작성한 변수 프로퍼티의 값을 BP에서 변경할 수 있도록 생성한다면 언리얼엔진의 블루프린트(BP)에서 해당 변수의 값을 변경시 기존에 설정한 값이 즉시 수정 반영 되지 않습니다.

 

C++클래스생성 > C++클래스를 상속받아 BP 클래스를 생성 > 생성된 BP클래스에서 C++클래스에서 생성하고 노출시켜 변수의 값을 BP에서 변경 > BP의 로직에 사용된 변수는 C++에서 초기화된 값으로만 지정

 

예를 들어 아래와 같은 변수가있는 투사체 클래스를 C++을 통하여 변수를 생성하고 BP에 노출시키도록 설정하였을때

위의 클래스를 바탕으로 생성한 BP클래스에서 해당 변수가 노출되어 수정이 가능한 것이 보입니다.

C++클래스에서 해당 변수를 투사체의 움직임에 사용할때 BP에서 해당 값을 변경합니다.

변경후 컴파일 및 저장까지 하였으나 해당 투사체의 초기속도와 최대 속도는 변경 되지 않은 것을 볼 수 있습니다.

 

이처럼 프로퍼티의 값을 변경시 즉각적으로 로직에 반영하기 위해서 에디터에서 수정시 바로 반영시키기 위한 함수를 정리합니다.

 

헤더파일에서 #if WITH_EDITOR - #endif 를 사용하여 에디터에서 작동할 함수를 선언합니다.

피룡한 함수는 Actor클래스에서 재정의 할 수 있는 PostEditChangeProperty 함수 입니다.

함수 선언 정의시에도 마찬가지로 #if WITH_EDITOR - #endif 를 사용합니다.

재정의하는 함수이기때문에 Super 호출을 실행하고

임시변수에 매개변수의 Event 프로퍼티의 이름을 저장 후

에디터에서 즉시 수정반영할 변수의 이름을 GET_MEMBER_NAME_CHECKED매크로를 사용하여 변경된 프로퍼티의 이름과 체크할 프로퍼티의 이름이 동일한 경우 값을 업데이트하는 로직을 사용합니다.

함수 바인딩과 유사한 사용방법.

 

이후부터는 해당 프로퍼티의 값이 변경될 경우 변경된 값이 즉시 반영이 되는 것을 확인할 수 있습니다.

댓글