UE 编辑器属性节点可见性更新
2026/6/10 3:26:51 网站建设 项目流程

打开DataTable中RowEditor的SearchBox后发现,搜索Category的子串,会将该类下所有属性都显示出来,有点怪,所以结合AI梳理了更新的流程,备忘。

可见性由两方面决定

  • 属性名/子属性名 匹配搜索串
  • 属性Category/属性值 匹配搜索串

更新逻辑流程

核心逻辑:FDetailItemNode::FilterNode()

  • 其中的关键属性是 bShouldBeVisibleDueToFiltering,由 PassesAllFilters() 负责更新,FDetailItemNode::GetVisibility() 中使用。

核心逻辑:PassesAllFilters()

  • 核心的可见性判断是 const bool bPassesSearchFilter = bPassesCategoryFilter || bPassesValueFilter || bSearchFilterIsEmpty || ( bIsNotBeingFiltered || bIsSeenDueToFiltering || bIsParentSeenDueToFiltering );
    • 不过滤 或 Category匹配 或 属性值匹配
    • 自定义细节面板这里不考虑,走的是另外的逻辑
    • bIsSeenDueToFiltering 和 bIsParentSeenDueToFiltering 由 PropertyNodeFlags 确定,在 FPropertyNode::FilterNodes() 中更新。

调用栈

  • SDetailsViewBase::OnFilterTextChanged(const FText& InFilterText)
  • SDetailsViewBase::FilterView(const FString& InFilter)
  • SDetailsViewBase::UpdateFilteredDetails()
    • FPropertyNode::FilterNodes(...)
    • FDetailLayoutBuilderImpl::FilterDetailLayout( const FDetailFilter& InFilter )
      • FilterNode()

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询