TIL - Today I Learned : C++의 변수를 Blueprint에 노출하거나 수정하는 법을 배웠다!
Blueprint와 C++가 다르고 또 Default Blueprint와 Instance Blueprint가 다르다는 걸 확실히 깨달았다!
오늘의 진도: Section 5: Toon Tank 117. Static Mesh Component ~ 121. Exposing The Components
Static Mesh Component
#pragm once 는 기본적으로 제공되는 기능은 아니지만 언리얼 엔진에서는 제공 되는 기능이다.
현재 헤더파일이 중복으로 추가되는 것을 방지한다.
UCapsuleComponent의 경우 헤더 파일을 추가해주어야 하기 때문에 forward declaration으로 처리하였지만
UStaticMeshComponent와 USceneComponent는 이미 포함되어있기 때문이다.
Deriving Blueprint Classes
만들었던 C++ class를 가지고 Blueprint를 생성한다.
생성된 Blueprint를 보면 Parent class가 Base Pawn이라는걸 볼 수 있다.
Components 창을 보면 BasePawn의 생성자에서 추가한 컴포넌트들이 있다.
그런데 Detail창에서 확인이 되지 않는다..
C++ Class에서 에디터에서 수정할 수 있게 해줘야 하기 때문이다.
Instance vs Default
UPROPERTY 매크로에 여러가지 지정자가 있다.
Blueprint Class를 에디터에서 열었을 때 Detail 창에서 볼 수 있으려면 VisibleAnywhere 를 사용할 수 있다
하지만 수정은 불가능하다
EditAnywhere의 경우 수정이 가능하다
VisibleInstanceOnly라는게 있는데 이건 월드에 개체가 인스턴스화 되었을 때만 볼 수 있다.
Default Blueprint로 봤을 때는 VisibleInstanceOnly가 없지만
월드에 개체를 인스턴스화 하면 VisibleIntanceOnly 변수를 확인 할 수 있다.
Editing Exposed Variables
자주 쓸 UPROPERTY 매크로의 지정자를 정리하자면 다음과 같다.
Defaults | Instance | Event Graph | |
Read Only | VisibleAnywhere | BlueprintReadOnly | |
VisibleDefaultsOnly | VisibleInstanceOnly | ||
Read / Write | EditAnywhere | BlueprintReadWrite | |
EditDefaultsOnly | EditInstanceOnly |
두가지 변수를 하나는 BlueprintReadWrite로 지정하고 다른 하나는 BlueprintReadOnly로 지정한 후에
EventGraph에서 어떻게 나오는지 보자.
EditAnywhere 변수는 Get / Set 모두 있지만 (Read / Write)
VisibleAnywhere 변수는 Get 만 있다. (Read Only)
Exposing The Components
private으로 선언한 변수를 EditAnywhere으로 지정하게되면 컴파일 오류가 난다.
private는 외부에서 접근하지 못하게 하는데 EditAnywhere를 해버리면 외부에서 접근하겠다는거니 안된다 한다.
private으로 선언한 변수들을 EventGraph에서 사용하려면 UPROPERTY 매크로에 추가로 넣어줘야한다.
metadata를 통해 private 변수를 EventGraph에 노출시킬 수 있다.
변수의 카테고리를 지정 할 수도 있다.
Blueprint의 Detail창에도 새로운 카테고리가 생겼고
BasePawn이 아니라 My Private Variables로 변경되었다.
추가했던 Component를 Blueprint에서 수정할 수 있도록 한다.
Private인데 Blueprint에서 수정하다니!! 라고 생각이 들 수 있지만
C++ Class와 Blueprint는 또 다른 것이라 생각하면 된다.
Blueprint에서 수정이 가능해도 C++에서는 외부에서 접근할 수 없는 상태를 유지한다.
이제는 Blueprint에 노출이 되고 수정이 가능하다.
Blueprint에서 Mesh를 추가하고 월드에 인스턴스화 하였다.
카와이한 탱크와 포탑이 생겼다.
참고 링크 : Metadata Specifiers
학습 강의 : Udemy Unreal Engine 5 C++ 개발자: C++ 학습하고 비디오 게임 제작하기
'Unreal Engine > Udemy:UE5 C++ 학습하고 게임 만들기' 카테고리의 다른 글
Unreal Day - 34 - UE5의 Cast가 평범한 Cast가 아니었던 건에 대해.. (0) | 2024.07.05 |
---|---|
Unreal Day - 33 - Sweep! 감지한다 충돌 (2) | 2024.07.03 |
Unreal Day - 31 - Start Toon Tank! (0) | 2024.06.27 |
Unreal Day - 30 - End of Section 4. Crypt Raider (0) | 2024.06.26 |
Unreal Day - 29 - Dependency Injection (0) | 2024.06.26 |