Unreal UPROPERTY

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 파라미터는 추가적인 메타데이터를 제공하여 변수의 동작을 더욱 세밀하게 제어할 수 있습니다.
  • 예를 들어 ClampMinClampMax는 변수의 값을 특정 범위 내로 제한합니다.
   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에서 객체의 프로퍼티를 정의하고, 다양한 시스템과 상호 작용하는 데 필수적인 도구입니다. 위에서 설명한 다양한 속성들을 조합하여, 게임의 요구에 맞는 객체 프로퍼티를 효과적으로 관리할 수 있습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *