搜索 Unity

Unity 2021.2搜索功能更新

2022年1月19日 类别 技术 | 9 分 阅读
3 spheres on black background
3 spheres on black background
涵盖的主题
分享

过去一年里,Unity的搜索功能经历了极大的转变。除了能按名称查找对象的Quick Search,还有更为精细的核心搜索功能,你将能保存搜索结果、查看结果详情,并使用类似LINQ的语言来发起复杂的搜索,快来体验最新的搜索功能吧。

自2021.1版本首次推出的Search已然成为许多Unity用户必用的功能。内置于编辑器内的搜索功能无须安装额外软件包就能投入使用。

你可以输入字符来搜索对象并进行操作,也能发起更为复杂的搜索,发挥工具的潜力。在Unity 2021.2的新版本中,搜索功能迎来了一系列的重大改进,保证用户能维持高生产力。请在下文详细了解本次更新。

*注意,Quick Search目前有一版实验性版本可兼容2020.3,并包含了几乎所有的核心功能。要安装最新的预览包,请打开Project Settings,找到并启用Preview Packages选项。

改进后的数据排列

今天的Asset Indexing System(资源索引系统)要比以往更为强劲。初次排列现在不仅占用更少的时间和空间,而且还支持在Index ManagerWindow > Search > Index Manager )中自定义设置来扩充索引的信息量。

Unity Search indexing

如果像上方一样启用列表中的PropertiesDependencies,你就可以更充分地利用新的Search Picker和Table。

搜索记录组织

另一个重大改进位于超级好用的搜索记录(Save Searches)功能里。我们很清楚重复地搜索是多么可恼,所以我们为搜索记录加了新的组织选项。

Unity saved search organization

新选项包括:只显示在用户个人页面的User Searches(保存为偏好设置),及与所有项目参与人共享的Project Searches (保存为项目资源)。你可以为结果设置图标,并在新窗口中打开搜索结果。搜索窗口的状态将被保留,搜索文本、图标大小(特别是Table布局)和打开的搜索栏将始终被恢复。

Search Table视图

搜索窗口允许以多种方式可视化对象,包括列表、大图标列表及多种尺寸的块状视图,如下图所示。

Unity 2021.2支持在Table中可视化查询结果:

你可以按名称或描述来进行排序,甚至能用Search Expression(搜索表达式)来提取文件属性,生成类似下方的列表:

当然,这些花时间布置的列表也是可以保存的。前边提到,整个搜索窗口状态将持续保留,这其中也包括列表布局。你甚至可以创建自己的资源管理器,同时比较多个文件的属性值。

在建立好一个列表布局后,你可以点击Save 按钮,将详细的报告保存为CSV或JSON文件,方便审查和比较同一项目的各个版本。

Search Picker

该功能更能满足高级Unity用户的需求。Unity现在支持用搜索窗口代替旧方法来选取资源、对象或其他内容,让选取更加精确。你可以在代码中指明搜索所涉及的脚本属性。

先为任意参考属性加上[SearchContextAttribute]特性,再指定每次搜索的Search Provider,来发起一次范围更小的初始搜索,或设定Search View Flags来更改Search Picker的外貌。

上方设定看起来会像这样:

注意,在Search Picker视图默认带有一种网格图的搜索设置。

搜索表达式

最后,我们加入了搜索表达式的概念。搜索表达式可让搜索字符更为强大、个性化。那它究竟能帮你做些什么呢?

  • 你能用它来发起一次交叉引用多个Search Provider的搜索,或同时发起多次搜索。
    • 比如说,显示当前场景中所有着色器无法编译的对象。
  • 在搜索中转换和筛选结果,表达式非常像LINQ加上SQL加上Lisp(S-Expression句法)。
    • sort{count{...groupby{a:assets, @type}}, @value, desc}
    • select{t:LODGroup, @lodsize}
  • 如果在Search Table中使用,你就能发起复杂的搜索,并将结果列为表格。Search Expression可用作长期集成或验证系统的基础。

当然Search Expression的句法非常多,你可能会在搜索时用到以下内容:

查找所有带有“rock”纹理的预制件:

t:prefab ref={t:texture rock}。

搜索系统将根据t:texture rock开始查找,再到所有纹理上查找t:prefab ref=,最后汇总并显示结果。

查找项目中的资源种类数:

count{t={distinct{select{a:assets, @type}}}}

求出项目中所有LODGroup配置文件的平均LODSize:

avg{select{t:LODGroup, @lodsize}}

通常大括号就代表着搜索表达式。而前缀avg select distinct则表明了搜索结果的处理方法。求值过程运行于Unity的后台线程中,无论搜索有多复杂、数据有多大,搜索窗口不会出现无响应情况。

搜索功能同样支持保存非常长的搜索表达式,方便下次使用。

反馈及更多

本文介绍的所有功能都在Unity编辑器文档中有说明

并且,我们还制作了多个搜索功能演示和几种基于Search功能打造的原型开发工具,并专程上传到公共GitHub仓库内供大家下载使用。 

我们的Wiki百科还收录了几篇关于非常不错的搜索功能文章,其中有一篇详细解读了更为精密的搜索表达式

Query Examples页面还提供了2022.1新搜索功能的预览。

若想进一步了解Unity 2022.1的开发工作,请查看beta版启动博文

2022年1月19日 类别 技术 | 9 分 阅读
涵盖的主题