일반적으로 디테일 패널(Details Panel) 은 사용자가 오브젝트를 선택할 때만 자체 리빌드됩니다. 즉, 편집 조건을 사용하여 디테일 패널 커스터마이제이션에서 필드를 추가하거나 숨기거나 추가를 건너뛰는 경우, 편집 조건에 사용된 변수를 변경해도 디테일 패널이 업데이트됩니다. 대신, 오브젝트 선택을 해제하거나 재선택할 때도 디테일 패널이 업데이트됩니다.
수동으로 디테일 패널 을 업데이트하려면 업데이트를 트리거하려는 프로퍼티에 대해 IDetailLayoutBuilder::ForceRefreshDetails 를 호출하는 델리게이트를 추가합니다. 이 튜토리얼에서는 이러한 종류의 델리게이트를 생성하는 방법을 살펴봅니다.
이 튜토리얼은 디테일 패널 퀵스타트의 코드를 기반으로 합니다.
단계
다음 단계에 따라 디테일을 새로 고칠 수 있는 재사용 가능한 델리게이트를 생성합니다.
-
IDetailLayoutBuilder::ForceRefreshDetails를 호출하도록 델리게이트를 구성합니다. 다음은CustomizeDetails함수에 인라인을 배치하고 새로 고침을 트리거하려는 모든 프로퍼티에 재사용할 수 있는 단순한 람다 함수 델리게이트입니다.CustomClassDetailsCustomization.cpp
const FSimpleDelegate OnValueChanged = FSimpleDelegate::CreateLambda([&DetailBuilder]() { DetailBuilder.ForceRefreshDetails(); }); -
IDetailLayoutBuilder::GetProperty를 사용하여 프로퍼티를 가리키는 TSharedRef을 가져옵니다. CustomClassDetailsCustomization.cpp
TSharedRef<IPropertyHandle> boolPropertyHandle = DetailBuilder.GetProperty(GET_MEMBER_NAME_CHECKED(ACustomActor, CustomBool)); -
IPropertyHandle::SetOnPropertyValueChanged를 사용하여 델리게이트를 할당하고 해당 프로퍼티가 변경될 때마다 디테일 패널을 새로 고치도록 강제합니다.CustomClassDetailsCustomization.cpp
boolProperty->SetOnPropertyValueChanged(OnValueChanged);
이렇게 변경하면 CustomBool 필드를 변경할 때마다 디테일 패널이 새로 고쳐집니다.