* 정의
UPROPERTY(), UFUNCTION()과 같은 속성들을 정의할 때 엔진과 에디터의 다양한 측면에서 행동 방식을 제어하기 위해 EditAnywhere, BlueprintCallable 등과 같은 키워드를 넣을 수 있다. 이들을 속성 지정자라고 한다.
* 동작 방식
- Archetype과 Instance
속성 지정자를 확인하려면 ArcheType과 Instance에 대해 간단히 알아야 한다.
ArcheType은 속성의 집합인 객체의 템플릿이다. Unity3D의 Prefab이라고 보면 된다.
Instance는 ArcheType을 통해 생성된 객체이다.
- 속성 지정자 종류
자주 쓰는 몇 가지를 정리해보면 다음과 같다.
| 속성 태그(Property Tag) | 효과(Effect) |
| Edit ~ | |
| EditAnywhere | 속성 윈도우에서 ArcheType, Instance에 대해 수정할 수 있다. |
| EditDefaultsOnly | 속성 윈도우에서 ArcheType에 대해서만 수정할 수 있다. |
| EditInstanceOnly | 속성 윈도우에서 Instance에 대해서만 수정할 수 있다. |
| Visible ~ | |
| VisibleAnywhere | 속성 윈도우에서 ArcheType, Instance가 보여진다. 수정 불가능하다. |
| VisibleDefaultsOnly | 속성 윈도우에서 ArcheType만 보여진다. 수정 불가능하다. |
| VisibleInstanceOnly | 속성 윈도우에서 Instance만 보여진다. 수정 불가능하다. |
| Blueprint ~ | |
| BlueprintCallable | 블루프린트 코드에서 호출할 수 있다. |
| BlueprintAssignable | 멀티캐스트 델리게이트에서 사용 가능, 블루프린트에서 해당 속성을 할당할 수 있다. |
| BlueprintReadOnly | 블루프린트에서 읽을 수 있지만 수정은 불가능하다. |
| BlueprintReadWrite | 블루프린트에서 읽고 쓸 수 있다. |
| BlueprintImplementableEvent | 블루프린트에서만 함수를 정의해야 한다. 만약 CPP에서 정의한다면 에러가 발생한다. |
| BlueprintNativeEvent | CPP에서 정의하고, 블루프린트에서 오버라이딩할 수 있다. CPP에서 정의할 때 XXX_Implementation라는 함수명으로 정의하여야 한다. |
- 주의할 점
@ Visible, Edit의 적용 범위는 해당 객체 그 자체라는 것을 주의하여야 한다.
예를 들어 UStaticMeshComponent를 정의할 때 VisibleAnywhere 의 속성 지정자를 사용해도, UStaticMeshComponent 내부에 EditAnywhere 속성 지정자로 정의된 UStaticMesh는 어디서든 수정할 수 있다. 하지만 Visible 속성 지정자로 설정되어 있기 때문에 새로운 UStaticMeshComponent 를 할당할 수 없다.
그래서 보통 UStaticMeshComponent와 같은 UObject는 Visible 속성 지정자를 많이 사용하고, int 형과 같은 자료형에는 Edit 속성 지정자를 많이 사용하는 편이다.
@ Edit, Visible은 하나만 선택하여 사용할 수 있다. (Blueprint 관련 속성 지정자와 조합하여 사용 가능하다.)
- 사용 팁
모두 그런것 은 아니지만, 보통 로직의 대부분을 CPP에서 처리하고, 리소스(Mesh, UI)와 관련된 정보들을 블루프린트를 통해서 많이 작성하는 것 같다.
예를 들어 플레이어 캐릭터의 로직을 모두 CPP내에 작성해두고, SkeletalMesh 정보를 블루프린트에서 적절한 Mesh로 연결하여 사용한다.(물론 CPP내에서도 Mesh정보를 불러와서 연결 시킬 수 있다. 하지만 블루프린트를 사용하면 직접 눈으로 보면서 작업할 수 있기 때문에 편리하다.)
자세한 속성에 대한 정보와 속성 지정자는 다음에서 확인할 수 있다.
https://docs.unrealengine.com/5.0/en-US/unreal-engine-uproperties/
Properties
Reference for creating and implementing properties for gameplay classes.
docs.unrealengine.com
'게임 엔진 > Unreal Engine' 카테고리의 다른 글
| [UnrealEngine] UObject 시스템(UObject System) (0) | 2022.03.30 |
|---|---|
| [UnrealEngine] UObject (0) | 2022.03.30 |
| [UnrealEngine] 리플렉션(Unreal Property System (Reflection)) (0) | 2022.03.29 |
| [UnrealEngine] 스마트 포인터(Smart Pointer) (0) | 2022.03.28 |
| [UnrealEngine] Actor 생명주기(Actor Lifecycle) (0) | 2022.03.28 |