共计 1800 个字符,预计需要花费 5 分钟才能阅读完成。
【博物纳新】是 UWA 旨在为开发者推荐新颖、易用、有趣的开源项目,帮助大家在项目研发之余发现世界上的热门项目、前沿技术或者令人惊叹的视觉效果,并探索将其应用到自己项目的可行性。很多时候,我们并不知道自己想要什么,直到某一天我们遇到了它。
更多精彩内容请关注:lab.uwa4d.com
导读
在 UWA 开源库中,有各种各样的实用工具可供大家选择。今天给大家介绍的是 Unity 引用查找工具,也是在研发过程中非常实用的小工具。
开源库链接:https://lab.uwa4d.com/lab/5ccea58f72745c25a817c300
一、使用介绍
把这个库下载下来,它的主体代码只有三个脚本,包括了引用查找、界面展示等逻辑。需要使用时,只要把这个文件夹放进工程里即可。
将 ReferenceFinder 文件夹放进了一个 Demo 工程中,这个工程中总共包含 300 多个资源和文件夹,是一个比较简单的工程。
我们知道 Unity 自带的关于引用查找的工具有两个,分别是 Find References In Scene 和 Select Dependencies。
但是这两个功能有两个缺点:
1、没有 GUI 可以直观地看到引用依赖的资源结果;
2、查找引用的对象只能针对于当前场景中的 GameObject,不适用于 Prefab 等资源。
本文介绍的查找引用工具就可以实现这两个功能。
在工程中选择一个资源,右键菜单选择最后一项“Find References”。
就可以在 Ref Finder 界面中查看该资源的引用和依赖资源了。这里呈现引用关系是以树状结构呈现的,不仅能看到引用资源,还能看到这些资源之间的引用关系,非常直观。每个资源包含资源类型、资源名、资源路径、状态等信息。
点击 Model 按钮可以切换查看引用 / 依赖模式,Expand/Collapse 可以快速展开 / 折叠树状结构:
双击列表中的资源,即可以在 Project 视图中定位到这一资源。
点击左侧的 Refresh Data 可以刷新依赖引用关系的数据。注意需要在修改数据之后先保存一下工程,否则可能不生效。
二、原理简述
这个小工具主要包含三个脚本:
ReferenceFinderData: 引用数据生成、缓存、更新的相关逻辑。
ReferenceFinderView: 定义了 Editor 界面 UI 的打开逻辑及主要 GUI 代码。
AssetTreeView: 定义了 Editor 界面中根据引用数据生成的资源树状结构及资源的双击响应事件。
本工具的作者在介绍中也写到,对于这类引用关系的做法,无外乎两种:
1、每次都进行一次全局查找,保证查找的正确性。
2、缓存一次全局查找的数据,在资源变动时更新缓存数据,保持查找的正确性。
由于一次全局查找使用的资源依赖接口 GetDependencies 本质上是 guid 也就是文本的查找和比较,所以通常会很慢,尤其是对于研发后期甚至上线后的项目,项目的资源量都很大,Prefab 资源也很多,就会使全局查找的时间成倍数增加。对于大型项目这个过程可能会在 10 分钟以上。如果希望在资源管理中,检查多个资源的依赖关系,第一种方式显然是无法接受的。
第二种方式,全局查找一次之后,就可以使用缓存数据查看所有资源的依赖关系了。同时对每个资源记录 AssetDatabase.GetAssetDependencyHash 的哈希值作为最后一次资源修改的时间标记。如果有资源修改了,通过比对这个哈希值来做增量数据更新,就可以减少数据更新的速度了。在修改资源不多的情况下,更新数据的时间也不会很长。
因此在这个工具中使用的是第二种方式,在测试过程中,确实更新数据的操作是非常快的。
缓存数据默认保存在 Library/ReferenceFinderCache 路径下,大家也可以在 ReferenceFinderData 中修改保存路径。对于使用 SVN 等工具的团队需要注意缓存文件的提交。
三、总结
今天给大家介绍的是一个研发中的实用小工具——Unity 引用查找工具。在 UWA 开源库中其实有很多类似的小工具,这个是我们目前看到的,不管在易用性、界面美观、还是效率上都有一定优势的一个小工具,在此推荐给大家。
快用 UWA Lab 合辑 Mark 好项目!
今天的推荐就到这儿啦,或者它可直接使用,或者它需要您的润色,或者它启发了您的思路 ……
请不要吝啬您的点赞和转发,让我们知道我们在做对的事。当然如果您可以留言给出宝贵的意见,我们会越做越好。