UPROPERTY
는 Unreal Engine의 객체 프로퍼티를 정의할 때 사용하는 매크로입니다. 이 매크로는 Unreal Engine의 리플렉션 시스템, 가비지 컬렉션, 블루프린트 통합 및 네트워크 복제를 지원하기 위해 필요합니다. UPROPERTY
를 사용하면 클래스의 변수에 다양한 속성을 지정할 수 있으며, 이 속성들은 에디터와 런타임 모두에서 다양한 기능을 제공합니다.
아래에서 UPROPERTY
의 주요 사용법과 다양한 속성들을 살펴보겠습니다.
기본 예제
#include "YourClass.h" #include "YourClass.generated.h" UCLASS() class YOURGAME_API AYourClass : public AActor { GENERATED_BODY() public: // UPROPERTY 매크로를 사용하여 변수 선언 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "YourCategory") int32 ExampleInt; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "YourCategory") FString ExampleString; };
UPROPERTY 속성들
UPROPERTY
매크로에는 다양한 속성을 사용할 수 있습니다. 각 속성은 변수의 동작 방식을 결정하는 데 중요한 역할을 합니다.
1. EditAnywhere, EditDefaultsOnly, EditInstanceOnly
EditAnywhere
: 에디터에서 이 변수를 편집할 수 있습니다.EditDefaultsOnly
: 클래스의 기본값(디폴트)만 편집 가능하며, 인스턴스화된 객체는 편집할 수 없습니다.EditInstanceOnly
: 인스턴스화된 객체에서만 편집 가능하며, 클래스의 기본값은 편집할 수 없습니다.
UPROPERTY(EditAnywhere, Category = "YourCategory") int32 EditableVariable;
2. VisibleAnywhere, VisibleDefaultsOnly, VisibleInstanceOnly
VisibleAnywhere
: 변수는 에디터에서 볼 수 있지만 편집할 수는 없습니다.VisibleDefaultsOnly
: 클래스의 기본값만 볼 수 있으며, 인스턴스화된 객체는 볼 수 없습니다.VisibleInstanceOnly
: 인스턴스화된 객체에서만 볼 수 있습니다.
UPROPERTY(VisibleAnywhere, Category = "YourCategory") int32 ReadOnlyVariable;
3. BlueprintReadOnly, BlueprintReadWrite
BlueprintReadOnly
: 변수는 블루프린트에서 읽을 수 있지만 쓸 수는 없습니다.BlueprintReadWrite
: 변수는 블루프린트에서 읽고 쓸 수 있습니다.
UPROPERTY(BlueprintReadOnly, Category = "YourCategory") FString ReadOnlyString;
4. Transient
- 이 속성은 변수의 값이 저장되지 않으며, 로드 시 초기화된다는 것을 의미합니다. 주로 런타임에만 필요한 변수에 사용됩니다.
UPROPERTY(Transient) int32 TransientVariable;
5. Replicated, ReplicatedUsing
Replicated
: 이 변수는 네트워크 상에서 복제됩니다.ReplicatedUsing
: 이 변수는 네트워크 상에서 복제되며, 복제될 때 호출되는 함수를 지정할 수 있습니다.
UPROPERTY(Replicated) int32 ReplicatedVariable; UPROPERTY(ReplicatedUsing=OnRep_ReplicatedVariable) int32 ReplicatedVariableWithNotify; UFUNCTION() void OnRep_ReplicatedVariable();
6. Category
- 이 속성은 변수의 카테고리를 지정하여 에디터에서 변수들을 그룹화할 수 있게 합니다.
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "CustomCategory") float CustomCategoryVariable;
7. meta
meta
파라미터는 추가적인 메타데이터를 제공하여 변수의 동작을 더욱 세밀하게 제어할 수 있습니다.- 예를 들어
ClampMin
과ClampMax
는 변수의 값을 특정 범위 내로 제한합니다.
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "YourCategory", meta = (ClampMin = "0.0", ClampMax = "100.0")) float ClampedVariable;
8. AdvancedDisplay
- 이 속성은 에디터에서 해당 변수를 ‘Advanced’ 그룹에 배치하여 기본적으로 숨깁니다.
UPROPERTY(EditAnywhere, AdvancedDisplay, Category = "YourCategory") float AdvancedVariable;
9. SaveGame
- 이 속성은 해당 변수가 게임 저장 시 저장되는 데이터를 나타냅니다.
UPROPERTY(EditAnywhere, BlueprintReadWrite, SaveGame) int32 SaveableVariable;
10. Instanced
- 이 속성은 해당 변수가 객체의 인스턴스임을 나타내며, 자식 객체로서 에디터에서 편집할 수 있게 합니다.
UPROPERTY(EditAnywhere, Instanced, Category = "YourCategory") UObject* InstancedObject;
예제: 모든 속성 사용해보기
아래는 여러 가지 속성을 결합하여 사용하는 예제입니다.
#include "YourClass.h" #include "YourClass.generated.h" UCLASS() class YOURGAME_API AYourClass : public AActor { GENERATED_BODY() public: // 변수는 블루프린트에서 읽고 쓸 수 있으며, 에디터에서 볼 수 있습니다. UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "General") int32 Health; // 변수는 에디터에서 기본값으로만 볼 수 있으며, 인스턴스화된 객체에서 볼 수 없습니다. UPROPERTY(VisibleDefaultsOnly, Category = "General") FString Name; // 변수는 런타임에만 사용되며, 저장되지 않습니다. UPROPERTY(Transient) bool bIsDead; // 이 변수는 네트워크 상에서 복제되며, 복제될 때 특정 함수가 호출됩니다. UPROPERTY(ReplicatedUsing = OnRep_IsDead) bool bReplicatedIsDead; UFUNCTION() void OnRep_IsDead(); // 변수는 게임 저장 시에만 저장됩니다. UPROPERTY(EditAnywhere, SaveGame, Category = "SaveData") int32 SaveGameData; };
정리
UPROPERTY
매크로는 Unreal Engine에서 객체의 프로퍼티를 정의하고, 다양한 시스템과 상호 작용하는 데 필수적인 도구입니다. 위에서 설명한 다양한 속성들을 조합하여, 게임의 요구에 맞는 객체 프로퍼티를 효과적으로 관리할 수 있습니다.