包含此页的版本:
不含此页的版本:
搜索表达式允许您添加到搜索查询语言中,以表达交叉引用多个提供程序的复杂查询,例如,搜索场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表使用着色器在 GPU 上运行的程序。更多信息
请参阅术语表这不会编译。
搜索表达式可以链接在一起,以转换或对搜索项执行设置作。
在“搜索”窗口中输入搜索表达式以返回结果:
count{a:assets}如果使用的是可视化查询生成器,请将其关闭以输入搜索表达式。切换开关位于搜索字段旁边。
搜索表达式以可以包含内部表达式的根表达式开头。
一个简单的查询,例如t:shader是一种表达。它返回与项目中着色器对应的所有搜索项。
使用搜索表达式语言将多个查询组合到单个表达式中,以创建更灵活的搜索。
搜索表达式支持以下内容:
t:shader
t:prefab ref={t:texture}
count{t:shader}
3或"this is a string literal"
@path or @mesh(任何以开头的标识符都假定为从搜索项中提取值的选择器。选择器可以查找对象的属性或用于动态计算结果)@所有搜索表达式都返回一组搜索项 (IEnumerable<SearchItem>).作为一般准则,搜索表达式语言使用大括号来表示一组项。甚至字面表达式,例如{}3在内部评估为一组:{3}.
搜索表达式可以链接在一起以进行更复杂的查询:
t:prefab ref={t:texture}
t:prefab ref={t:texture size>4000}:查找纹理大小大于 4000 字节的项目中的所有预制件。
这相当于:
运行t:texture size>4000返回项目中所有 4K 纹理的列表(例如,armor.png,treasure.png).
运行t:prefab ref=<one of the 4K textures>(例如,t:prefab ref=armor.png然后t:prefab ref=treasure.png).
聚合所有结果并将其作为搜索项的单个列表返回。
t:[shader, material, texture]:查找类型为shader,material或texture.使用普通查询,它可以表示为:
t:shader or t:material or t:texture
Unity 有一个搜索表达式函数库,用于作和转换搜索项集。这些函数中的每一个都可以接受多个参数并返回一组项。Unity 搜索表达式使用大括号来表示函数调用。
所有功能的完整列表在这里。
示例:函数计数对作为参数传递的每个集合的项目进行计数,并返回一个数字。
count{t:shader}:返回一个包含项目中着色器数量的集合。例:{34}.count{t:shader, t:texture}:返回一个包含项目中着色器和纹理数量的集合。例:{34, 2048}.函数可以链接在一起,类似于 LISP 编程语言中使用的 s 表达式。
注意:只能有一个根表达式。
按作顺序计算的函数链示例:
print{"path=@path", first{10, sort{t:texture, @size}}}:打印项目中 10 个最大纹理的路径
t:texture:查找项目中的所有纹理,然后选择“大小”属性。sort{ t:texture, @size}:根据它们的大小属性对所有这些纹理进行排序。first{10:选择前 10 个排序纹理。print{ "path=@path":根据格式字符串在控制台中打印此列表,其中 Unity Search 提取每个结果项的 path 属性path=@path.函数可以具有多个签名(方法名称及其每个形式参数的类型和类型(值、引用或输出),类似于 C#),并且可以支持可选(不需要传递给函数的参数)和可变参数(可以接受可变数量的参数)参数。
文本是您要搜索的实际单词或数字,或者您要检索的数字金额,而不是查询字符串。例如,t:texture 搜索类型名称中带有纹理的资产(例如,Texture2D),但添加引号使其成为文字,“t:texture”搜索名为 t:texture 的资产。
| 表达 | 描述 |
|---|---|
| 数 | 文字数 (1,2,3, and so on) |
| 设置 | 方括号 ([ ]) |
| 字符串 | 单引号或双引号(或''"") |
数字文字可以用作函数的参数(例如first).
first{10, t:shader} -> {the first 10 shaders return by the 't:shader' query}
使用方括号表示一组值。集合可以包含任何类型的表达式,但搜索表达式解析器将假定集合的元素是文字而不是搜索查询。[]
例:
[t:shader, hello, 3] -> ["t:shader", "hello", 3]
如果使用大括号 (),解析器会将其视为三个查询:{}
{t:shader, hello, 3}-> {<运行 t:shader 的查询>,<运行 hello> 的查询,<运行 3> 的查询}
字符串文字可以用作某些函数的参数(例如format).您可以使用单引号或双引号指定字符串文字:
“你好”或“你好”
将格式字符串作为参数的格式函数:
format{t:texture, '@path (@size)'}
选择器是使用前缀表示的标识符。使用选择器访问项的属性,以便进行计算、筛选或格式化。选择器可以映射到 UnityEngine.Object 的序列化属性或自定义函数,以允许访问动态数据。@
任何搜索项支持的基本选择器包括:
id:根据其搜索提供程序,此项目的唯一 ID。value:项目的内部值。默认情况下,它是它的 ID,但函数可以覆盖项目的值。label: 项目标签,如“搜索”窗口中所示desc或description:项目描述(“搜索”窗口的第二行)Unity 还为搜索项定义了通用选择器,例如:
@name: UnityEngine.Object.name@size:资产的磁盘文件大小@path:资产路径@extension:资产文件扩展名@provider:已生成此项目的搜索提供程序要访问搜索项的特定属性以执行作,请使用选择器:
count{t={distinct{select{a:assets, @type}}}}
a:assets, @type查找项目中的所有资产,然后选择type属性。distinct返回存在的所有类型的列表。t={list of types}返回每种类型的每个资产的多个列表。count计算项目中每种类型的资产数量。avg{@size,t:shader}
t:shader, @size:查找所有着色器,然后选择 size 属性。avg:计算项目中所有着色器的平均大小。print{@value, count{t:texture, t:material}}
选择器查找序列化属性和材料属性:@#
sort{t:texture, @#height}:按其高度序列化属性的顺序对所有纹理进行排序。您可以命名搜索表达式,使其更易于在“搜索”窗口中显示。
例如,输入表达式sort{count{t:audio, t:texture}, @value,desc}在搜索窗口中,可能很难读取哪个计数对应于哪种类型:
使用别名:sort{count{t:audio as Audio, t:texture as Texture}, desc}产生更具可读性的结果:
要动态生成别名,请使用alias功能。例如:
alias{[1, 2, 3], 'Title value'}
将产生带有以下标签的项目:
{Title 1, Title 2, Title 3}
expand 运算符...允许将一组项分组为多组项,而不仅仅是一组项。
...{expandable expression} -> {sub expr 1} {sub expr 2} {sub expr N}
例:
一个小型项目有 3 个预制件、4 个纹理和 5 个着色器。以下表达式提供所有计数:
count{t:[prefab, texture, shader]} -> {12}
搜索表达式的结果t:[prefab, texture, shader]是 12 个类型预制件、纹理和着色器的项的统一列表。这也可以表示为:t:prefab or t:texture or t:shader.
使用展开运算符分别计算每种资产类型的数量:
count{...t:[prefab, texture, shader]} -> count{t:prefab, t:texture, t:shader} -> {3, 4, 5}
groupBy 函数可以与 expand 运算符一起使用,以返回按公共键分组的项集。
例:
一个项目具有三种类型的资源(预制件、纹理和着色器)。对于选择器@type返回搜索项的类型,则表达式将扩展为:
count{t:prefab or t:texture or t:shader}
您可以使用groupBy函数按类型对项目进行分组,然后计算每种类型的每个项目数量:
count{...groupBy{t:prefab or t:texture or t:shader, @type}}
这些示例演示了如何将搜索表达式用于项目中的复杂请求。
计算场景中的预制件使用情况并按最高使用率排序:
sort{select{p: t:prefab *.prefab, @path, count{t:scene ref:@path} as count}, @count, desc}
对所有资产类型进行排序和计数
sort{count{...groupby{a:assets, @type}}, @value, desc}
找到meshUnity 的主要图形原语。网格体构成了 3D 世界的很大一部分。Unity 支持三角或四边形多边形网格。Nurbs、Nurms、Subdiv 曲面必须转换为多边形。更多信息
请参阅术语表顶点最多(假设项目中可用@vertices选择器)。
first{sort{t:mesh, @vertices, desc}}
按顶点计数对所有网格进行排序
sort{select{h: t:mesh, @path, @vertices}, @vertices, desc}
计算所有网格的顶点数
sum{select{h:t:mesh, @vertices}}
查找引用网格的所有资产
ref=select{p:t:mesh, @path}
列出预制件场景引用计数
select{p: *.prefab, @path, count{p: a:sceneIndex ref="@path"} as count}
搜索表达式评估基于 C# 迭代器模式和 yield 关键字的使用。这可确保评估作为完全异步作公开,并尽可能非阻塞。它允许每个搜索表达式在完全计算初始搜索项集之前开始计算。
默认情况下,所有搜索表达式计算都在工作线程中完成,以免阻塞编辑器。对于需要依赖非线程安全的 Unity API 的作(如某些选择器访问器),我们有一个实用程序 API 来将这些作排队在主线程上并维护生成搜索项的模式。
搜索表达式语言已设计为可自定义的。用于自定义框架所有部分的 API 将在将来的版本中提供。