Unity引用查找工具开源库

Unity引用查找工具开源库

导读

在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好项目!

请输入图片描述

今天的推荐就到这儿啦,或者它可直接使用,或者它需要您的润色,或者它启发了您的思路......

请不要吝啬您的点赞和转发,让我们知道我们在做对的事。当然如果您可以留言给出宝贵的意见,我们会越做越好。


【博物纳新】是UWA旨在为开发者推荐新颖、易用、有趣的开源项目,帮助大家在项目研发之余发现世界上的热门项目、前沿技术或者令人惊叹的视觉效果,并探索将其应用到自己项目的可行性。很多时候,我们并不知道自己想要什么,直到某一天我们遇到了它。

更多精彩内容请关注:lab.uwa4d.com

  • 游戏周报分享第 4 期 - Huozk 发表在 6月7日 回复

    [...]3、Unity引用查找工具开源库[...]

  • 游戏周报分享第 6 期 - Huozk 发表在 5月24日 回复

    [...]} window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag('js',new Date());gtag('config','UA-117773755-1'); 不止于游戏,还有技术。 Huozk Whether to log in now?主页归档周报编程设计开发闲[...]