[Details (詳細)] パネルは、通常、オブジェクトが選択されたときにのみ、パネルが自動的に再構築されます。つまり、編集条件を使用して、[Details] パネルのカスタマイズでフィールドの追加、非表示、または追加のスキップを行うと、編集条件で使用されている変数を変更しても、[Details] パネルが更新されます。また、オブジェクトの選択を解除して再選択しても、[Details] パネルが更新されます。
[Details] パネル を手動で更新するには、更新をトリガーしたいプロパティに IDetailLayoutBuilder::ForceRefreshDetails を呼び出すデリゲートを追加します。このチュートリアルでは、このようなデリゲートの作成方法について説明します。
このチュートリアルは、[Details (詳細)] パネルのクイックスタート のコードに基づいています。
手順
以下の手順を実行して、[Details] をリフレッシュするための再利用可能なデリゲートを作成します。
-
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を使用して、デリゲートを割り当て、そのプロパティが変更されるたびに [Details] パネルを強制的にリフレッシュします。CustomClassDetailsCustomization.cpp
boolProperty->SetOnPropertyValueChanged(OnValueChanged);
この変更により、[CustomBool] フィールドに変更があると、[Details] パネルがリフレッシュされます。