[Details (詳細)] パネルのカスタマイズでは、[Details (詳細)] パネルにプロパティが表示される順序を変更したり、通常は非表示のプロパティの表示/非表示を切り替えたりすることができます。このページでは、プロパティとカテゴリの両方の表示、非表示、および並べ替えを行う方法について説明します。
必須条件
このページでは、「[Details (詳細)] パネルのカスタマイズのクイックスタート」チュートリアルの例をベースとして使用しています。また、以下を参照しています。
- FCustomDataProperty – 以下で構成されるカスタム構造体:
- TSoftObjectPtr
CustomTexture - FName CustomName
- FString CustomString
- Int32 CustomInt
- TSoftObjectPtr
- ACustomActor – 以下の追加されたプロパティを含む単純なアクタ:
- TSoftObjectPtr
CustomMesh - float CustomFloat
- bool CustomBool
- FCustomDataProperty CustomData
- TSoftObjectPtr
-
FCustomDataPropertyCustomization – FCustomDataProperty のプロパティ タイプのカスタマイズ。
- FCustomClassDetailsCustomization – ACustomActor の詳細のカスタマイズ。
ユーザーによる変更に基づいて詳細の表示/非表示を切り替えたい場合は、「[Details (詳細)] パネルをリフレッシュする」も確認してください。
プロパティ
並び替えのプロパティ
AddProperty 呼び出しを行う順序を変更することで、プロパティを並べ替えることができます。([Details (詳細)] パネルのカスタマイズのクイックスタート)[setting-up-your-production-pipeline\scripting-and-automating-the-editor\slate-tools-programming\DetailsCustomization\Quickstart] の「クラスの詳細のカスタマイズ」には、プロパティの並べ替えの例が記載されています。ACustomActor の元のプロパティの宣言は次のとおりです。
CustomActorClass.h
UPROPERTY(EditAnywhere)
TSoftObjectPtr<UStaticMesh> CustomMesh;
UPROPERTY(EditAnywhere)
float CustomFloat;
UPROPERTY(EditAnywhere)
bool CustomBool;
UPROPERTY(EditAnywhere)
FCustomDataProperty CustomData;
通常、CustomMesh と CustomFloat は [Details (詳細)] パネルの最初に表示されます。ただし、FCustomClassDetailsCustomization::CustomizeDetails 関数で、これらは以下のように [Details (詳細)] パネルに追加されます。
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 が最初に表示されます。同様に、他のカスタム スレート 要素も追加した順に表示されます。
[Details Customization (詳細のカスタマイズ)] でプロパティを追加しない場合は、アクタのデフォルトの順序とデフォルトのカテゴリが使用されます。プロパティを表示しない方法については、以下の「プロパティを非表示にする」を参照してください。
プロパティを非表示にする
IDetailCategoryBuilder::HideProperty を使用すると、UPROPERTY 指定子によって通常表示されるプロパティを選択的に非表示にすることができます。
CustomClassDetailsCustomization.cpp
DetailBuilder.HideProperty(FCustomDataProperty::StaticStruct()->GetFName());
カテゴリ
カテゴリを並べ替える
IDetailCategoryBuilder::SortCategories を使用すると、カスタム カテゴリのレンダリング順序を設定することができます。
IDetailCategoryBuilder::SortCategories は void FunctionName (const TMap<FName, IDetailCategoryBuilder*>&) というシグネチャを持つデリゲートを取得します。このデリゲートで使用する関数はすべて静的関数である必要があります。TMap は、カスタム クラスによって追加されたすべてのカテゴリで構成されるマップです。TMap からカテゴリを取得したら、IDetailCategoryBuilder::SetSortOrder を使用して、カテゴリが表示される順序を変更することができます。IDetailCategoryBuilder::SetSortOrder は常に昇順にソートします。
CustomClassDetailsCustomization.h
static void SortCustomDetailsCategories(const TMap<FName, IDetailCategoryBuilder*>& AllCategoryMap);
CustomClassDetailsCustomization.cpp
//2 つのカテゴリ名を持つカスタムの詳細。
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);
}
[Advanced (詳細)] カテゴリ
IDetailCategoryBuilder::SetShowAdvanced を使用すると、[Details (詳細)] パネルの [Advanced (詳細)] セクションを展開したときにのみ表示されるカテゴリを指定できます。
CustomClassDetailsCustomization.cpp
void FCustomClassDetailsCustomization::CustomizeDetails(IDetailLayoutBuilder& DetailBuilder)
{
FName CustomCategoryName = FName("Custom Settings");
IDetailCategoryBuilder& CustomCategory = DetailBuilder.EditCategory(CustomCategoryName);
CustomCategory.SetShowAdvanced(true);
}