UPROPERTY 변수는 변수 지정자 및 선언 위에 사용하는데, 메타데이터와 같은 추가 설명자와 함께 표준 C++ 구문을 사용하여 선언됩니다. 속성(property)을 선언함으로써 엔진 및 에디터의 다양한 측면에서 작동하는 방식을 제어할 수 있습니다.
UPROPERTY([specifier, specifier, ...], [meta=(key=value, key=value, ...)])
Type VariableName;
Garbage Collection
GC는 오브젝트 계층구조를 designated된 UPROPERTY들을 통해 여행합니다. root objects부터 시작하게 되는데 AddToRoot, RemoveFromRoot 메서드를 통해 handle되는 root object들을 말하는 것입니다. 이 여행을 통해 연결할 수 없는 오브젝트들은 어떠한 오브젝트이던지 garbage collected 됩니다. 따라서 비 UPROPERTY 변수는 GC 시스템에서 계산되지 않습니다. (UPROPERTY 변수가 아니라면 알아서 메모리관리를 잘 해줘야 한다는 뜻.)
쉽게 예를 들어서 만약 내가 두개의 서로를 참조하고 있는 UObjects를 가지고 있다고 가정해보자.(Cyclic Reference 같은 것) , 하지만 다른 object들이 그 두개를 참조하지 않는다면 두개의 UObject들은 GC될것이다.
Valid Specifiers (지정자)
참고 : 모든 valid UPROPERTY specifier 들은 enum value들로 listed되어있어. "ObjectBase.h" 헤더파일 Line 728에서 찾을 수 있다.
1. Const : 이 속성(property)는 const이므로 const로 exported되어야 합니다. 4.12.5버전 이하는 이 지정자 사용 시 컴파일 에러가 야기될 수 있습니다. 대신에 Visible*지정자들 중 하나를 사용하세요.
2. Config : 이 프로퍼티(속성)은 configurable(구성가능한)으로 만들어질 것입니다. Current Value는 클래스와 연결된 .ini 파일에 저장할 수 있으며 생성될 때 로드됩니다.디폴트 프로퍼티에 값을 지정할 수 없습니다. Blueprint 읽기 전용을 의미합니다.
2.1 GlobalConfig : 하위 클래스에서 재정의할 수 없다는 점을 제외하고는 Config과 동일하게 작동합니다. 디폴트 프로퍼티에 값을 지정할 수 없습니다. Blueprint 읽기 전용을 의미합니다.
3. Localized : 속성은 localize(지역화) 가능한 text로 로드되어야 합니다. ReadOnly(읽기 전용)을 의미합니다.
4. Transient : 이 속성은 일시적을 의미합니다. 저장,로드가 안되며 이 방식으로 태그가 지정된 속성은 로드 시 0으로 채워집니다. SaveGame 지정자의 반대입니다. // 언리얼 오브젝트에는 직렬화 기능이 있어서 오브젝트의 UPROPERTY 속성을 저장하고 로딩할 수 있다. 하지만 컴포넌트의 스탯 중 게임을 시작할 때마다 변경되는 값들은 보관하는 것이 의미가 없고 오히려 오브젝트를 저장할 때 필요없는 디스크 공간만 차지한다. 이러한 속성에는 Transient 키워드를 추가해 해당 속성을 직렬화에서 제외시키는 것이 좋다.
5. DuplicateTransient : 모든 유형의 복제(복사/붙여넣기, 이진 복제 등) 도중에는 항상 default value로 리셋됩니다.
6. NonPOETransient : 위와 같습니다.
7. Ref : 함수 호출 이후 값이 복사됩니다. 오직 함수 매개 변수 선언에서만 유효합니다. 이 지정자는 UPARAM 지정자입니다. UPROPERTY 지정자가 아닙니다.
8. Export : 오브젝트 property(속성)은 해당 소유자와 함께 exported될 수 있습니다.
9. EditInline : 에디터에서 이 오브젝트 참조를 inline으로 Edit합니다.
10. NoClear : 에디터에서 지우기 단추를 숨깁니다.
11. EditFixedSize : 배열의 요소는 에디터에서 수정할 수 있지만 크기는 변경할 수 없음을 나타냅니다. Static 배열과 같은 container들(TArray와 같은)은 허용되지 않습니다. dynamic 배열을 사용하세요! Structs의 container array에서 제대로 동작하지 않을 수 있습니다.
12. Replicated : 이 속성은 네트워크 replication(복제)와 관련이 있습니다.
13. RelicatedUsing = FucntionName : replication에 대한 속성이 구성됩니다. 제공된 함수는 replication을 통해 복제된 속성을 receive한 경우에만 호출됩니다.
14. RepRetry : 이 속성을 완전히 전송하지 못한 경우(네트워크를 통해 직렬화할 수 있는 오브젝트 레퍼런스를 아직 사용할 수 없는 경우) 이 속성의 복제를 다시 시도합니다.
15. NotReplicated : 복제를 건너뜁니다. (서비스 요청 함수의 구조체 구성원 및 매개 변수에만 해당됨.)
16. Interp : matinee(마티니...?)에 사용할 보간 가능한 속성입니다. 에디터에서 항상 사용자가 설정할 수 있습니다.
17. NonTransactional : 이 변수 값에 대한 변경 내용은 에디터의 실행 취소, 재실행 기록에 포함되지 않습니다.
18. Instanced : Property는 Component의 레퍼런스입니다. 인라인 편집 및 Export를 의미합니다.
19. BlueprintAssignable : 멀티캐스트 델리게이트에만 해당됩니다. 블루프린트에 할당하려면 속성이 노출되어야 합니다.
20. Category : 에디터 내에서 속성의 카테고리를 지정합니다. "|"로 구분된 하위 카테고리를 지원합니다.
21. SimpleDisplay : 에디터의 디테일창에 기본적으로 표시됩니다.
22. AdvancedDisplay : 에디터의 디테일 panel에서 속성을 Advanced 드롭다운으로 이동합니다. 4.12.5 하위 버전에선 작동하지 않는 것으로 추정.
23. EditAnywhere : 에디터 내의 속성 창, Archetype(원형) 및 인스턴스를 통해 이 속성을 편집할 수 있음을 나타냅니다.
24. EditInstanceOnly : 속성 창에서 이 속성을 편집할 수 있지만 Archetype이 아닌 인스턴스에서만 편집할 수 있음을 나타냅니다.
25. EditDefaultsOnly : 속성 창에서 이 속성을 편집할 수 있지만 Archetype에서만 편집할 수 있음을 나타냅니다. 이 연산자는 Visible* 지정자와 호환되지 않습니다.
26. VisibleAnywhere : 이 속성이 모든 속성 창에 표시되지만 편집할 수 없음을 나타냅니다.
27. VisibleInstanceOnly : 이 속성은 Archetype이 아닌 인스턴스의 속성 창에만 표시되며 편집할 수 없음을 나타냅니다.
28. VisibleDefaultsOnly : 이 속성은 Archetype의 인스턴스의 속성 창에만 표시되며 편집할 수 없음을 나타냅니다.
29. BlueprintReadOnly : 이 속성은 블루프린트에서 읽을 수 있지만 수정할 수는 없습니다.
30. BlueprintReadWrite : 이 속성은 블루프린트에서 읽고 수정이 가능합니다.
31. AssetRegistrySearchable : 이 키워드는 이 속성을 멤버 변수로 포함하는 에셋 클래스 인스턴스에 대해, 이 속성과 해당 값이 에셋 레지스트리에 자동으로 추가됨을 나타냅니다. struct 속성이나 매개 변수에 사용하는 것은 허용되지 않습니다. (참고)
32. SaveGame : SaveGame을 사용하려면 속성을 직렬화해야 합니다. Transient 지정자의 반대입니다.
33. BlueprintCallable : 멀티캐스트 델리게이트만 해당됩니다. 블루프린트 코드를 호출하려면 속성을 노출해야 합니다.
34. BlueprintAuthorityOnly : 멀티캐스트 델리게이트만 해당됩니다. 이 델리게이트는 BlueprintAuthorityOnly 가 포함된 이벤트만 받습니다.(블루프린트에서만)
35. TextExportTransient : 이 속성은 텍스트 형식으로 내보내지지 않으므로 복사/붙여넣기 작업에 사용할 수 없습니다.
36. BlueprintGetter = GetterFunctionName : 이 속성은 커스텀 접근자 함수를 지정합니다. 이 속성에 BlueprintSetter 또는 BlueprintReadWrite 태그가 지정되어 있지 않으면 암묵적으로 BlueprintReadOnly가 됩니다.
37. BlueprintSetter = SetterFunctionName : 이 속성에는 커스텀 변환기 함수가 있으며 BlueprintReadWrite로 암시적으로 태그가 지정됩니다. 변환기 함수는 반드시 지정되야 하고, 동일한 클래스 일부여야 한다는 점을 명심하세요.
38. Native : 이 속성은 Native(본래의, 선천적인)입니다. : C++코드는 이를 직렬화하고 가비지 컬렉션에 노출시키는 역할을 합니다.
39. NoExport : 네이티브 클래스에만 유용합니다. 이 속성은 자동 생성 클래스 선언에 포함되지 않아야 합니다.
40. NonPIEDuplicateTransient : 이 속성은 PIE(Play in Editor) 세션에서 복제되는 경우를 제외하고, 복제 중 디폴트 벨류로 리셋됩니다.
41. SerializeText : 네이티브 프로퍼티는 텍스트(ImportText, ExportText)로 직렬화해야합니다.
42. SkipSerialization : 이 속성은 직렬화되지 않지만 복사, 붙여넣기 작업과 같은 텍스트 포멧으로 익스포트될 수 있습니다.
# 아직 설명이 작성되지 않은 지정자들 : BindWidget, BindWidgetAnim, BindWidgetAnimOptional.
Metadata Specifiers
클래스, 인터페이스, 구조체, 열거형, 열거형 값, 함수 또는 프로퍼티를 선언할 때 메타데이터 지정자를 추가하여 엔진 및 에디터의 다양한 측면과 상호 작용하는 방식을 제어할 수 있습니다. 데이터 구조체 또는 멤버의 각 타입에는 각자의 메타데이터 지정자 목록이 있습니다. (Warning! 메타데이터는 에디터에만 있습니다. 메타데이터에 엑세스하는 게임 로직을 작성하지 마시오.) 다음은 UPROPERTY에 대한 메타 지정자 목록입니다. 클래스, 함수, 구조체, 열거형 등에 대한 메타 지정자를 알아보려면 여기를 클릭하세요!
1. AllowAbstract = "true/false" : Subclass 및 SoftClass 프로퍼티에 사용됩니다. Abstract(추상)클래스 타입을 클래스 선택기에 표시할지 여부를 나타냅니다.
2. AllowedClasses = "Class1, Class2, ..." : FsoftObjectPath 프로퍼티에 사용됩니다. 에셋 선택기에 표시할 에셋의 클래스 유형을 나타내는 쉼표로 구분된 목록입니다.
3. AllowPreserveRatio : FVector 프로퍼티에 사용됩니다. 이 프로퍼티를 디테일 패널에 표시할 때 비율 잠금이 추가됩니다.
4. ArrayClamp = "ArrayProperty" : 정수(integer) 프로퍼티에 사용됩니다. UI에 입력할 수 있는 유효한 값이 0과 명명된 배열 프로퍼티의 길이 사이가 되도록 클램프합니다.
5. AssetBundles : SoftObjectPtr 또는 SoftObjectPath 프로퍼티에 사용됩니다. 이 레퍼런스가 속한 번들을 지정하기 위해 기본 데이터 에셋(Primaty Data Assets) 내에서 사용되는 번들 이름 목록입니다.
6. BlueprintBaseOnly : Subclass 및 SoftClass 프로퍼티에 사용됩니다. Blueprint 클래스만 클래스 선택기에 표시할지 여부를 나타냅니다.
7. BlueprintCompilerGeneratedDefaults : 프로퍼티 디폴트는 블루프린트 컴파일러에서 생성되며 CopyPropertiesForUnrelatedObjects 함수가 Post-Compile에서 호출되었을 때에는 복사되지 않습니다.
8. ClampMin = "N" : float와 int 프로퍼티에 사용됩니다. 프로퍼티에 대해 입력할 수 있는 최소값 N을 지정합니다.
9. ClampMax = "N" : float와 int 프로퍼티에 사용됩니다. 프로퍼티에 대해 입력할 수 있는 최대값 N을 지정합니다.
10. ConfigHierarchyEditable : 이 프로퍼티는 Config(.ini) 파일로 직렬화되며, Config Hierarchy의 어느 위치에서든 설정할 수 있습니다.
11. ContentDir : FDirectoryPath 프로퍼티에서 사용됩니다. 콘텐츠폴더 내의 슬레이트-스타일 디렉토리 선택기를 사용하여 경로를 선택함을 나타냅니다.
12. DisplayAfter = "PropertyName" : 이 프로퍼티는 두 프로퍼티가 동일한 범주에 있는 한, 소스 코드 순서에 관계없이 PropertyName 프로퍼티 바로 뒤에 Blueprint Editor에 표시됩니다. 여러 프로퍼티가 동일한 DisplayAfter 값과 동일한 DisplayPriority 값을 가질 경우 헤더 파일에 선언된 순서대로 명명된 프로퍼티가 뒤에 표시됩니다.
13. DisplayName = "Property Name" : 코드에서 생성한 이름 대신 이 프로퍼티에 대해 표시할 이름입니다.
14. DisplayPriority = "N" : 두 프로퍼티의 DisplayAfter 값이 동일하거나 동일한 범주에 있고 DisplayAfter Meta Tag가 없는 경우 이 프로퍼티는 정렬 순서를 결정합니다. 가장 높은 우선운위 값은 1입니다. 즉, DisplayPriority 값이 1인 속성이 DisplayPriority 값이 2인 속성 위에 나타납니다. 여러 속성의 DisplayAfter 값이 동일한 경우 헤더 파일에 선언된 순서대로 표시됩니다.
15. DisplayThumbnail = "true" : 프로퍼티가 에셋 타입이며 선택한 에셋의 섬네일을 표시해야 함을 나타냅니다.
16. EditCondition = "BooleanPropertyName" : 이 프로퍼티의 편집이 비활성화되었는지 여부를 나타내는 데 사용되는 Bool 프로퍼티의 이름을 지정합니다. 프로퍼티 이름 앞에 "!"를 넣으면 테스트가 반전됩니다.
# EditCondition 메타 태그는 더 이상 단일 Bool 프로퍼티로 제한되지 않습니다. 이제 Full-fledged Expression Parser를 사용하여 평가됩니다. 즉, 전체 C++ 표현식을 포함할 수 있음을 의미합니다.
17. EditFixedOrder : 배열 요소를 끌어서 정렬하지 않도록 합니다.
18. ExactClass = "true" : 허용된 클래스(AllowedClasses)와 함께 FsoftObjectPath 프로퍼티에 사용됩니다. 허용된 클래스에 지정된 Exact(정확한) 클래스만 사용할 수 있는지 아니면 SubClasses도 유효한지 여부를 나타냅니다.
19. ExposeFunctionCategories = "Category1, Category2, ..." : 블루프린트 에디터에서 함수 목록을 빌드할 때 어떤 함수가 표시되어야 하는지 카테고리 목록을 지정합니다.
20. ExposeOnSpawn = "true" : 이 클래스 타입에 대해 프로퍼티를 생성자 노드에 표시할 지 여부를 지정합니다.
21. FilePathFilter = "FileType" : FFilePath 프로퍼티에서 사용됩니다. 파일 선택기에 표시할 경로 필터를 나타냅니다. 일반적인 값에는 "Uasset"과 "Umap"이 있지만, 이 값들만이 가능한 것은 아닙니다.
22. GetByRef : 이 프로퍼티에 대한 "Get" Blueprint 노드가 해당 값의 복사본 대신 프로퍼티에 대한 Const 레퍼런스를 반환하도록 합니다. Sparse 클래스 데이터에서만 사용할 수 있으며, NoGetter가 없는 경우에만 사용할 수 있습니다.
23. HideAlphaChannel : FColor 및 FLinearColor 프로퍼티에 사용됩니다. 프로퍼티 위젯을 세부 정보에 표시할 때 Alpha 프로퍼티를 숨겨야 함을 나타냅니다.
24. HideViewOptions : Subclass 및 SoftClass 속성에 사용됩니다. 클래스 선택기에서 보기 옵션을 변경할 수 있는 기능을 숨깁니다.
25. InlineEditConditionToggle : Bool 프로퍼티가 다른 프로퍼티에서 편집 condition 토글로 인라인으로만 표시되고 자체 행에는 표시되지 않음을 나타냅니다.
26. LongPackageName : FDirectoryPath 프로퍼티에서 사용됩니다. 경로를 긴 패키지 이름으로 변환합니다.
27. MakeEditWidget : Transform, Rotator 프로퍼티나 그것들의 배열에 사용됩니다. 뷰포트에서 프로퍼티를 Movable 위젯으로 표시해야 합을 나타냅니다.
28. NoGetter : 블루프린트 생성 시 이 프로퍼티에 대한 "Get"노드가 생성되지 않습니다. Sparse 클래스 데이터에서만 사용할 수 있습니다.
'UE4' 카테고리의 다른 글
[UE4] 캐릭터 무브먼트 컴포넌트 (0) | 2022.11.24 |
---|---|
[UE4] 위젯 UI 제작하기 (0) | 2022.11.14 |
[UE4] Unrecognized type Error 해결법 (0) | 2022.11.12 |
[UE4] 캐릭터 스텟 컴포넌트 만들기 (0) | 2022.11.12 |
[UE4] CSV 데이터 불러오기 (0) | 2022.11.11 |