UPROPERTY()
UPROPERTY()는 변수에 붙는 리플렉션 메크로입니다, 위 코드 처럼 UPROPERTY() 메크로에 인자 값을 넣어서 용도에 맞게 활용 할 수 있습니다.
내부에 들어가는 인자 스타일은 제가 자주 쓰는 것 기준으로 크게 4가지 스타일이 있으며 순서대로 작성해보겠습니다.
분류한 스타일은 따로 자료가 없어서 제가 임의로 명칭했습니다.
https://docs.unrealengine.com/ko/Programming/UnrealArchitecture/Reference/Properties/index.html
해당 포스팅에서는 제 기준으로 자주 사용하는 것을 작성하며 그외 수많은 다른 설정 값을 위 페이지에서 확인하면 되겠습니다.
1. 변수 공개 & 수정 권한
인자값 순서는 상관없지만 제가 보통 맨 앞에 넣는 값입니다.
VisibleDefaultsOnly
VisibleInstanceOnly
VisibleAnywhere
EditDefulatOnly
EditInstanceOnly
EditAnywhere
위 6가지 값중 1개를 설정 할 수 있습니다.
헤더파일에서 위 처럼 변수를 작성합니다.
간단하게 표로 요약하면 아래와 같습니다.
Edit | Visible | |
DefaultsOnly | 블루프린트 에디터 창의 디테일 패널에서 값을 수정 가능 | 블루프린트 에디터 창의 디테일 패널에서 값을 보기 가능 |
InstanceOnly | 월드상에 배치된 오브젝트의 디테일 패널에서 값을 수정 가능 | 월드상에 배치된 오브젝트의 디테일 패널에서 값을 보기 가능 |
Anywhere | 블루프린트 에디터 & 월드상에 배치된 오브젝트의 디테일 패널에서 값을 수정 가능 | 블루프린트 에디터 & 월드상에 배치된 오브젝트의 디테일 패널에서 값을 보기 가능 |
- Visible과 Edit의 차이
우선 Edit와 Visible의 차이는 위와 같습니다, 일반 변수는 단순하게 보기, 수정으로 생각하면 되지만 클래스를 참조하는 포인터 변수는 좀 이야기가 달라지는데 이 주제는 좀 뒤에 다루겠습니다.
- DefaultsOnly, InstanceOnly, Anywhere의 차이
DefaultsOnly는 위 사진 처럼 블루프린트 에디터에서 값을 볼 수 있습니다.
InstanceOnly는 월드에 배치된 오브젝트의 디테일 패널에서 값을 볼 수 있습니다.
Anywhere는 블루프린트 에디터, 월드 둘다 볼 수 있습니다.
- 포인터 변수에 사용할 때
포인터 변수를 만들어 놓고 수정하고 싶다고 Edit를 사용하면 위 처럼 의도하지 않은 결과가 나옵니다,
원인은 해당 클래스를 수정하는 것이 아닌 포인터 변수의 참조를 수정하게 되기 때문에 위 처럼 참조를 변경하는 메뉴가 뜨게 됩니다.
Visible로 했을때 의도한 대로 해당 StaticMesh클래스의 정보를 수정할 수 있게 되었습니다.
2. 블루프린트 공개 & 수정 권한
두 번째 인자값 입니다, 블루프린트와 직접적으로 연관된 부분입니다.
BlueprintReadOnly | 블루프린트에서 해당 변수를 읽기가 가능합니다. |
BlueprintReadWrite | 블루프린트에서 해당 변수를 읽기 & 쓰기가 가능합니다. |
BlueprintGetter | 해당 변수에 접근 할 수 있는 함수를 지정하고 블루프린트는 해당 함수를 통해 변수에 접근합니다. |
BlueprintSetter | 해당 변수에 수정 할 수 있는 함수를 지정하고 블루프린트는 해당 함수를 통해 변수에 수정합니다. |
ReadOnly나 ReadWrite를 사용하면 블루프린트 에디터의 변수 패널에 변수를 확인 할 수 있습니다.
만약 보이지 않으면 패널의 우측 상단에 눈알 아이콘을 누르고 상속된 변수 표시를 체크하면 변수를 확인 할 수 있습니다.
- BlueprintReadOnly & BlueprintReadWrite
ReadOnly와 ReadWrite는 단순하게 블루프린트 내에서 해당 변수를 Get만 가능하먄 Get &Set 둘다 가능하냐 차이 입니다.
- BlueprintGetter & Setter
UPROPERTY(EditAnywhere, BlueprintGetter = GetTestValueGS, BlueprintSetter = SetTestValueGS)
float m_TestValue_GS = 3.0f;
UFUNCTION(BlueprintGetter)
float GetTestValueGS()
{
return m_TestValue_GS + 20.0f;
}
UFUNCTION(BlueprintSetter)
void SetTestValueGS(float fValue)
{
m_TestValue_GS += fValue + 100.0f;
}
C#의 Gettset & Setter와 같은 기능을 가졌으며 간단히 말하면 Get, Set을 커스텀 함수로 만들어 사용 할 수 있습니다.
특이 사항은 Settter함수를 사용 할 떄 자동으로 Getter함수까지 호출 됩니다.
위 코드와 같이 작성하고 블루프린트에서 값을 출력해 보겠습니다.
위와 같이 블루프린트 노드를 만들고 값을 확인하니
123.0이 뜨게 됩니다. 그 이유는 Getter가 자동으로 호출되서 기본값 3.0 + Getter 20.0f + Setter + 100.0f로 프로세스가 진행되서 위와 같은 결과가 나옵니다.
Getter를 제거하면
커스텀 Getter함수가 호출되지 않고 내장된 Getter함수가 대신 호출되어 103.0이 출력됩니다.
Category
Category는 위 처럼 디테일패널의 항목 이름을 명칭 할 수 있습니다.
상위명칭 | 하위명칭으로 위 처럼 작성하면 상하위 카테고리를 명칭 할 수 있습니다.
Meta
Meta 키워드는 Metadata 지정자라고 하며 에디터 관련 다양한 기능을 구현 할 수 있습니다.
위 처럼 변수가 private으로 되어 있지만 "meta = (AllowPrivateAccess = "true")"명령어를 사용하여 에디터에서 보이게 할 수 있고
위 처럼 다른 명령어도 합쳐서 사용이 가능합니다, 위 코드에 사용한 UIMin, UIMax는 에디터에서 조정할 수 있는 숫자 범위를 지정하는 명령어입니다.
이외에도 다양한 Metadata 명령어가 있습니다.
https://docs.unrealengine.com/ko/Programming/UnrealArchitecture/Reference/Metadata/index.html
그 외 기능
- Display
SimpleDisplay와 AdvancedDisplay입니다. 위 사진과 같이 SimpleDisplay는 이전에 썼던 변수와 같고 AdvancedDisplay를 사용하면 화살표를 통해 접었다가 펼칠 수 있습니다.
- 주석
UPROPERTY 메크로 위에 주석을 써놓으면 에디터에서 마우스를 올리면 위 처럼 주석내용을 볼 수 있습니다,
(4.23 기준으로 한글이 안됩니다.)
'Unreal > Programming' 카테고리의 다른 글
UE4 C++ Delegate 정리 & 샘플 프로젝트 (10) | 2019.10.09 |
---|---|
UE4 C++와 블루프린트 연동 기본 -2. UFUNCTION() (2) | 2019.10.03 |
UE4 C++와 블루프린트 연동 기본 -0. Reflection(리플렉션) (1) | 2019.09.16 |
UE4 Intellisense - UPROPERTY()같은 메크로 자동완성 기능 (0) | 2019.09.16 |
UE4 Foot Step Sound : 바닥재질 기반 발자국소리 (1) | 2019.07.18 |
WRITTEN BY
- CatDarkGame
Technical Artist dhwlgn12@gmail.com