3.1 KiB
3.1 KiB
bShowOnlyWhenTrue
- 功能描述: 根据编辑器config配置文件里字段值来决定当前属性是否显示。
- 使用位置: UPROPERTY
- 引擎模块: DetailsPanel
- 元数据类型: string="abc"
- 常用程度: ★
根据编辑器config配置文件里字段值来决定当前属性是否显示。
- 这个编辑器config配置文件,指的是GEditorPerProjectIni,因此一般是Config\DefaultEditorPerProjectUserSettings.ini
- 其中Section的名字是“UnrealEd.PropertyFilters”
- 然后Key的值就可以定了。
在源码里没有找到使用的例子,但这依然是可以工作的。
测试代码:
D:\github\GitWorkspace\Hello\Config\DefaultEditorPerProjectUserSettings.ini
[UnrealEd.PropertyFilters]
ShowMyInt=true
ShowMyString=false
UCLASS(BlueprintType)
class INSIDER_API UMyProperty_Show :public UObject
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int32 MyInt = 123;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (bShowOnlyWhenTrue = "ShowMyInt"))
int32 MyInt_WithShowOnly = 123;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (bShowOnlyWhenTrue = "ShowMyString"))
FString MyString_WithShowOnly;
};
测试结果:
可见MyString_WithShowOnly就没有显示出来,因为我们在DefaultEditorPerProjectUserSettings中配置了ShowMyString=false。
原理:
就是取得config中的值用来决定属性框是否显示。
void FObjectPropertyNode::GetCategoryProperties(const TSet<UClass*>& ClassesToConsider, const FProperty* CurrentProperty, bool bShouldShowDisableEditOnInstance, bool bShouldShowHiddenProperties,
const TSet<FName>& CategoriesFromBlueprints, TSet<FName>& CategoriesFromProperties, TArray<FName>& SortedCategories)
{
bool bMetaDataAllowVisible = true;
const FString& ShowOnlyWhenTrueString = CurrentProperty->GetMetaData(Name_bShowOnlyWhenTrue);
if (ShowOnlyWhenTrueString.Len())
{
//ensure that the metadata visibility string is actually set to true in order to show this property
GConfig->GetBool(TEXT("UnrealEd.PropertyFilters"), *ShowOnlyWhenTrueString, bMetaDataAllowVisible, GEditorPerProjectIni);
}
if (bMetaDataAllowVisible)
{
if (PropertyEditorHelpers::ShouldBeVisible(*this, CurrentProperty) && !HiddenCategories.Contains(CategoryName))
{
if (!CategoriesFromBlueprints.Contains(CategoryName) && !CategoriesFromProperties.Contains(CategoryName))
{
SortedCategories.AddUnique(CategoryName);
}
CategoriesFromProperties.Add(CategoryName);
}
}
}
void FCategoryPropertyNode::InitChildNodes()
{
bool bMetaDataAllowVisible = true;
if (!bShowHiddenProperties)
{
static const FName Name_bShowOnlyWhenTrue("bShowOnlyWhenTrue");
const FString& MetaDataVisibilityCheckString = It->GetMetaData(Name_bShowOnlyWhenTrue);
if (MetaDataVisibilityCheckString.Len())
{
//ensure that the metadata visibility string is actually set to true in order to show this property
// @todo Remove this
GConfig->GetBool(TEXT("UnrealEd.PropertyFilters"), *MetaDataVisibilityCheckString, bMetaDataAllowVisible, GEditorPerProjectIni);
}
}
}