* 정의

 

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

 

+ Recent posts