디테일 패널 커스터마이제이션(Details Panel Customizations)을 통해 디테일 패널에 표시되는 프로퍼티 순서를 변경하고 일반적으로 표시되지 않는 프로퍼티를 표시하거나 숨길 수 있습니다. 이 페이지에서는 프로퍼티와 카테고리를 표시하고 숨기고 순서를 변경하는 방법에 대한 지침을 제공합니다.
전제조건
이 페이지에서는 디테일 패널 커스터마이제이션 퀵스타트 튜토리얼에 기반한 예시를 보여주며 다음을 참조합니다.
- FCustomDataProperty – 다음으로 구성된 커스텀 구조체입니다.
- TSoftObjectPtr
CustomTexture - FName CustomName
- FString CustomString
- Int32 CustomInt
- TSoftObjectPtr
- ACustomActor – 다음과 같은 프로퍼티가 추가된 단순한 액터입니다.
- TSoftObjectPtr
CustomMesh - float CustomFloat
- bool CustomBool
- FCustomDataProperty CustomData
- TSoftObjectPtr
-
FCustomDataPropertyCustomization – FCustomDataProperty에 대한 프로퍼티 타입 커스터마이제이션입니다.
- FCustomClassDetailsCustomization – ACustomActor에 대한 디테일 커스터마이제이션입니다.
또한, 사용자가 변경한 내용에 따라 디테일을 표시하거나 숨기려는 경우 디테일 패널 새로 고치기도 검토해야 합니다.
프로퍼티
프로퍼티 순서 변경
AddProperty 호출 순서를 변경하여 프로퍼티 순서를 변경할 수 있습니다. 디테일 패널 커스터마이제이션 퀵스타트의 클래스 디테일(Class Details) 커스터마이제이션에는 프로퍼티 순서 변경 예시가 포함되어 있습니다. ACustomActor 에 대한 원래 프로퍼티 선언은 다음과 같습니다.
CustomActorClass.h
UPROPERTY(EditAnywhere)
TSoftObjectPtr<UStaticMesh> CustomMesh;
UPROPERTY(EditAnywhere)
float CustomFloat;
UPROPERTY(EditAnywhere)
bool CustomBool;
UPROPERTY(EditAnywhere)
FCustomDataProperty CustomData;
보통은 CustomMesh와 CustomFloat가 디테일 패널에 먼저 표시됩니다. 하지만, FCustomClassDetailsCustomization::CustomizeDetails 함수는 이 둘을 다음과 같이 디테일 패널에 추가합니다.
CustomActorClassCustomization.h
CustomCategory.AddProperty(GET_MEMBER_NAME_CHECKED(ACustomActor, CustomData));
CustomCategory.AddProperty(GET_MEMBER_NAME_CHECKED(ACustomActor, CustomBool));
CustomCategory.AddProperty(GET_MEMBER_NAME_CHECKED(ACustomActor, CustomMesh));
CustomCategory.AddProperty(GET_MEMBER_NAME_CHECKED(ACustomActor, CustomFloat));
그러면 CustomData와 CustomBool이 먼저 표시됩니다. 마찬가지로, 다른 커스텀 슬레이트(Slate) 요소도 추가한 순서대로 표시됩니다.
디테일 커스터마이제이션(Details Customization) 에 프로퍼티를 추가하지 않은 경우, 액터에 대해 디폴트 순서와 디폴트 카테고리가 사용됩니다. 프로퍼티를 표시하지 않는 방법에 대한 정보는 아래의 프로퍼티 숨기기(Hide Properties) 를 참조하세요.
프로퍼티 숨기기
보통은 UPROPERTY 지정자 때문에 표시되는 프로퍼티를 IDetailCategoryBuilder::HideProperty 를 사용하여 선택적으로 숨길 수 있습니다.
CustomClassDetailsCustomization.cpp
DetailBuilder.HideProperty(FCustomDataProperty::StaticStruct()->GetFName());
카테고리
카테고리 순서 변경
IDetailCategoryBuilder::SortCategories 를 사용하여 커스텀 카테고리가 렌더링되는 순서를 설정합니다.
IDetailCategoryBuilder::SortCategories는void FunctionName (const TMap<FName, IDetailCategoryBuilder*>&) 시그니처가 있는 델리게이트를 취합니다. 이 델리게이트에 대해 사용하는 모든 함수는 스태틱 함수여야 합니다. TMap은 커스텀 클래스에 의해 추가된 모든 카테고리의 맵입니다. 여기서 카테고리를 가져온 다음에는 IDetailCategoryBuilder::SetSortOrder 를 사용하여 카테고리가 표시되는 순서를 변경합니다. IDetailCategoryBuilder::SetSortOrder 는 항상 오름차순으로 정렬합니다.
CustomClassDetailsCustomization.h
static void SortCustomDetailsCategories(const TMap<FName, IDetailCategoryBuilder*>& AllCategoryMap);
CustomClassDetailsCustomization.cpp
//두 개의 카테고리 이름이 있는 커스텀 디테일입니다.
void FCustomClassDetailsCustomization::CustomizeDetails(IDetailLayoutBuilder& DetailBuilder)
{
IDetailCategoryBuilder& CustomCategory = DetailBuilder.EditCategory(FName("Custom Settings"));
IDetailCategoryBuilder& DataCategory = DetailBuilder.EditCategory(FName("Data"));
CustomCategory.AddProperty(GET_MEMBER_NAME_CHECKED(ACustomActor, CustomBool));
CustomCategory.AddProperty(GET_MEMBER_NAME_CHECKED(ACustomActor, CustomMesh));
DataCategory.AddProperty(GET_MEMBER_NAME_CHECKED(ACustomActor, CustomData));
DataCategory.AddProperty(GET_MEMBER_NAME_CHECKED(ACustomActor, CustomFloat));
DetailBuilder.SortCategories(&SortCustomDetailsCategories);
}
//디테일 카테고리를 정렬합니다.
void FCustomClassDetailsCustomization::SortCustomDetailsCategories(const TMap<FName, IDetailCategoryBuilder*>& AllCategoryMap)
{
(*AllCategoryMap.Find(FName("Custom Settings")))->SetSortOrder(1);
(*AllCategoryMap.Find(FName("Data")))->SetSortOrder(0);
}
카테고리 숨기기
IDetailCategoryBuilder::HideCategory 를 사용하여 전체 카테고리를 숨깁니다. UPROPERTY 지정자로 정의한 카테고리나 디테일 커스터마이제이션의 일부로 정의한 카테고리를 사용할 수 있습니다. 해당 카테고리의 FName 을 제공합니다.
CustomClassDetailsCustomization.cpp
void FCustomClassDetailsCustomization::CustomizeDetails(IDetailLayoutBuilder& DetailBuilder)
{
FName CustomCategoryName = FName("Custom Settings");
IDetailCategoryBuilder& CustomCategory = DetailBuilder.EditCategory(CustomCategoryName);
DetailBuilder.HideCategory(CustomCategoryName);
}
고급 카테고리
IDetailCategoryBuilder::SetShowAdvanced 를 사용하여 디테일(Details) 패널의 고급(Advanced) 섹션을 펼쳤을 때만 표시되는 카테고리를 지정할 수 있습니다.
CustomClassDetailsCustomization.cpp
void FCustomClassDetailsCustomization::CustomizeDetails(IDetailLayoutBuilder& DetailBuilder)
{
FName CustomCategoryName = FName("Custom Settings");
IDetailCategoryBuilder& CustomCategory = DetailBuilder.EditCategory(CustomCategoryName);
CustomCategory.SetShowAdvanced(true);
}