高级搜索语法
本文介绍在内容浏览器中执行搜索时的高级搜索语法,并制作保存自定义过滤器。
高级搜索语法支持复杂的搜索查询,能够根据资产元数据的"键-值"对进行搜索,并允许访问特殊键值。
基础知识
包括 内容浏览器 在内的 搜索框 允许你使用高级语法搜索内容。
默认情况下,在搜索框中输入文本字符串将立即产生结果。这些结果将基于资产的名称或其类别。
- 注意:这些结果仅来自 选中的当前目录和下面的所偶子目录。
例如,键入
BP_Example
将产生包含字符串 BP_Example 的名称的所有资产。如下所示 -
如果在搜索字段中键入Widget
,内容浏览器将生成名称中包含 Widget 的所有资产以及所有 Widget 蓝图-
左为Widget类型资产 ,右为Widget名称资产
😋这是我们日常的用法
😩虽然这种方法很有用,但如果结果有数百个,甚至数千个,它并不能帮助我们。这就是 搜索语法 的用处所在。
例如,将加号操作符
+
作为前缀添加到 BP_Example 将产生全匹配该字符串的结果。
(会在稍后讲解 “操作符” )
然后,将否定操作符-
作为前缀附加到 BP_Example 将只产生不匹配该字符串的资产。
搜索语法简介
搜索语法是由键 (Key) 、操作符 (Operator) 和值 (Values) 组成的参数。
例如,查找所有 名称 为 BP_Example 的资产的搜索参数如下所示 -
Name = BP_Example
其组成是:
名称 操作符 值 Name = BP_Example
接下来我们分别介绍 Key,Operator,Values
Keys
Keys(键)是参数的指导。
名称 | 描述 | 示例 | 替代项 |
---|---|---|---|
Name | 目标资产名称。默认情况下,搜索字段使用此键。 | Name = BP_Example | |
Path | 目标资产路径。请注意,这使用内容浏览器的文件路径。 | Path = “/Blueprints/Core” | |
Class | 目标资源的类/类型。 | Class = Blueprint Type = Widget | Type |
Collection | 包含资产的任何集合/收藏/标签的名称 | Collection = ExampleCollection | Tag |
ParentClass | 资产的父类 | ||
资产元数据 MetaData | 目标资源的元数据 请注意,并非所有元数据都可用于搜索。 | Triangles>=10500 Type==Skeletal UVChannels>2 CollisionPrims!=0 MaterialDomain=Decal |
这里需要着重说明一下 资产元数据
资产元数据搜索(Asset MetaData)
大多数可用于搜索的键来自于从资产注册表提取的资产元数据
不过,有几个特殊键适用于所有资产类型。这些特殊键仅支持
Equal
或NotEqual
比较运算符。
元数据是驻留在资产内部的键值对,每种资产类型都有自己特定的元数据集。
提示:在空白搜索字段中添加一个空格以查看所有可用的键。
例如:
- 输入搜索参数
Triangles > 10000
将搜索所有具有超过 10,000 个三角形的静态网格资产。 - 输入搜索参数
BlendMode = Masked
将搜索所有混合模式设置为 Masked 的材质。 - 输入
sRGB = false
将搜索所有禁用 sRGB 的纹理资产。
Operators
Operators(操作符)是参数的逻辑。
语法 | 类型 | 用途 | 示例 | 替代 |
---|---|---|---|---|
= | 相等 | 查找与提供的值完全匹配的项。 | Name == BP_Example | == : |
!= | 不相等 | 查找所有不匹配的项。 | Name != BP_Example | !: |
< | 小于 | 查找所有小于提供的值的项。 | Triangles < 10000 | |
<= | 小于等于 | 查找所有小于或等于提供的值的项。 | Triangles <= 10000 | <: |
> | 大于 | 查找所有大于提供的值的项。 | Triangles > 100 | |
>= | 大于等于 | 查找所有大于或等于提供的值的项。 | Triangles >= 100 | >: |
& | 且 | 查找满足这个条件和那个条件的项。 | Triangles < 1000 && Triangles > 2000 | AND && |
| | 或 | 查找满足这个条件或那个条件的项。 | Name == …_AC || Name == _SC | OR || |
! | 非 | 查找不满足这个条件的项。 | !BP_Example | NOT |
- | 取反 | 查找所有不是这个条件的项。 | -BP_Example | |
+ | 精准 | 查找所有完全匹配的项。 | +BP_Example | |
… | 开头或结尾的匹配 | 查找所有以这个开头或结尾的项。 | BP_… …_Example |
Values
Values(值)是参数的目标。
类型 | 示例 | 说明 |
---|---|---|
Boolean | bHDR = true bHDR = false | 不要使用0或1来表示布尔值。 |
String | Name = BP_Example Name = “BP Example” | 如果字符串中有空格,请使用引号。 |
Numeric | Triangles > 10000 | - 不要使用逗号 - 大于/小于根据特定键而定。 |
字符串
使用 无引号 和 带引号 字符串的主要差异在于带引号字符串允许在搜索词中使用空格和特殊字符。
默认情况下,它们将执行部分字符串匹配,除非使用了
TextCmpExact
或TextCmpAnchor
运算符来修改此行为。
一些特殊情况可能必须使用引号 标注为字符串 ,例如:
未注明为字符 | 注明为字符 | 说明 |
---|---|---|
Name=Name | Name=“Name” | 消歧义 |
Name=Name A | Name=“Name A” | 串允许在搜索词中使用空格和特殊字符 |
字符串可以带引号(单引号或双引号),也可以不带引号。
带引号的字符串可以包含嵌套引号;但是,必须使用反斜杠\
表示嵌套引号结束。
以下是使用单引号和双引号以及反斜杠的部分示例:
"Foo\"bar" -> Foo"bar 'Foo\'bar' -> Foo'bar "Foo\'bar" -> Foo'bar 'Foo\"bar' -> Foo"bar "Foo\\bar" -> Foo\bar 'Foo\\bar' -> Foo\bar
必须使用反斜杠来转义对另一个反斜杠的使用。
高级搜索语法
将搜索参数链接在一起是,是搜索需要真正掌握的地方。通过使用特定的操作符,可以连续链接多个搜索参数。
🤔注意:如之前列表所示,许多运算符都有替代字符。例如
AND
运算符由&
字符表示,OR
运算符由|
字符表示等。接下来可能会出现这种写法,不要迷茫
高级搜索简介
通过使用 AND
、OR
和 NOT
运算符,你可以同时测试多个搜索运算。
例如,搜索任何使用半透明材质且该材质使用默认光照着色模型的资产,应使用以下句法:
BlendMode==Translucent AND ShadingModel==DefaultLit
通过使用 AND
运算符,混合模式和着色模型的运算都必须求值为True的资产才会显示在结果。
如果换成 OR
运算符,任一运算单独求值为True即可显示在结果。
比如,并非每个使用半透明混合模式的材质都将使用默认照明。
对于复杂的高级搜索,同类型运算符必须始终合并起来。如果开始使用不同的运算符类型,括号可以消除不明确性。
例如,我们可以执行两个搜索,然后求值来显示结果。
第一个运算对半透明和默认光照的任何材质求值:
BlendMode==Translucent AND ShadingModel==DefaultLit
第二个运算会对所有属于延迟贴花类型并且不使用场景颜色的材质进行求值:
MaterialDomain==DeferredDecal AND HasSceneColor==False
可以使用括号对上述两个搜索的结果求值。
(BlendMode==Translucent AND ShadingModel==DefaultLit) OR (MaterialDomain==DeferredDecal AND HasSceneColor==False)
通过在两个括号括起的表达式之间使用 OR
运算符,结果将单独对每个括号中的表达式求值,然后显示任意一个为 True
的结果。如果使用 AND
运算符,则所有四个运算都必须返回 True
才会显示结果。
实例
输入 Name = Rocks
搜索:名字包含Rocks的资产
输入 Name = Rocks & Triangles > 10000
搜索:名字包含Rocks,且 面数超过10000的资产
我们继续 增加 搜索参数
输入 Name = Rocks & Triangles > 10000 & LODs = 1 & NaniteEnabled = false
我们搜索到的是:
- 名字包含 Rocks
- 超过 10000 面数
- 仅具有基本的LOD
- Nanite 已禁用(仅限 UE5+)
通过上面的例子,我们通过使用 AND
运算符将越来越多的搜索参数 链接 在一起,搜索变得更加优化,对目标的搜索范围逐渐 缩小 。
但为了使搜索参数更具包容性,我们还可以使用 OR
运算符,增加搜索范围的另一种可能性,将范围 扩大。
例如输入
Name = Rocks | Name = Gate | Name = Chunk
搜索Name的范围 扩大 到了含Rocks,Gate,Chunk的资产
回到之前的例子,让我们继续使用搜索参数 Triangles > 100000 & LODs = 1 & NaniteEnabled = false
当我们输入:
Name = Rocks | Name = Gate | Name = Chunk & Triangles > 100000 & LODs = 1 & NaniteEnabled = false
😕嘿,不对!我们搜索到的是:
- 名字包含Rocks或Gate的资产
- 名字包含Chunk的资产中超过 10000 面数、仅具有基本的LOD、Nanite 已禁用的资产
🤔发生了什么?
Triangles > 100000 & LODs = 1 & NaniteEnabled = false
这段搜索参数 仅 连接在了Name = Chunk
实际上,这里就应该使用()
来修复这个参数
(Name = Rocks | Name = Gate | Name = Chunk) & (Triangles > 100000 & LODs = 1 & NaniteEnabled = false & Materials = 1)
通过用()
包含参数,对参数之间进行隔离
这样我们搜索到的是:
- 名字包含Rocks或Gate或Chunk的资产
- 超过 10000 面数,仅具有基本的LOD ,Nanite 已禁用
自定义过滤器
😟虽然目前我们已经学会了如何编写自己的搜索语法,但是每次搜索都要写这么长一串参数链接,还是太麻烦了!
😮 ……等一下,这个是?
UE4中为💾硬盘图标,UE5为➕加号图标
EPICの怜悯!😇
这样,过滤器中,就可以保存我们的自定义过滤器啦!
完~
你已经是过滤器大师啦!✌
附:
一些常用搜索参数
以下是总结的常用的搜索参数列表。
范围 | 用途 | 示例 |
---|---|---|
General | 查找所有指定类型的资源 | +StaticMesh |
General | 根据部分字符串查找资源 | T_… || …_BC |
Blueprints | 查找所有蓝图 | +Blueprint |
Blueprints | 查找所有使用特定接口的蓝图 | ImplementedInterfaces=BPI_Example |
Blueprints | 根据组件数量查找蓝图 | BlueprintComponents = 0 |
Static Meshes | 查找所有静态网格 | +StaticMesh Type = +StaticMesh |
Static Meshes | 查找所有需要优化的静态网格 | Triangles > 10000 & LODs = 1 |
Static Meshes | 根据Nanite状态查找静态网格 | NaniteEnabled = false |
Static Meshes | 根据Nanite百分比查找静态网格 | NanitePercent < 50 |
Static Meshes | 查找没有LOD的静态网格 | LODs = 1 |
Static Meshes | 根据三角形数查找静态网格 | Triangles > 1000 |
Static Meshes | 查找所有具有特定数量UV通道的静态网格 | UVChannels > 2 |
Static Meshes | 查找所有具有特定数量材质槽的静态网格 | Materials > 2 |
Static Meshes | 查找所有使用LODGroup预设的静态网格 | LODGroup = LargeProp |
Materials | 查找所有材质 | +Material |
Materials | 根据材质域查找所有材质 | MaterialDomain = Surface |
Materials | 根据混合模式查找所有材质 | BlendMode = Translucent |
Materials | 根据Shading Model查找所有材质 | ShadingModel = Subsurface |
Textures | 查找所有纹理 | +Texture2D |
Textures | 根据尺寸查找所有纹理 | Dimensions = 2048 |
Textures | 根据sRGB设置查找纹理 | sRGB = true |