这是一个用来查找资源引用和依赖的插件,经过缓存来保存资源间的引用信息,经过树状结构直观的展现。
因为是经过缓存进行实现的,因此在但愿的到精确的引用信息时须要刷新缓存。不过因为缓存的存在,在资源改动较少的状况下,刷新速度较快,对使用影响较小。
直接将文件夹拖到项目中便可使用。
git
右键须要查找引用的文件或文件夹,点击Find References进行查找。
按钮含义:
Refresh Data:刷新缓存
Model:切换引用和依赖
NeedUpdateState:是否须要根据当前文件的状态更新State栏。
Expand:展开列表
Collapse:折叠列表
第三列的State为Changed表明这个资源被修改了,Missing表明资源被删除了,No Data表明缓存中没有该资源的信息。github
1.在每次须要查找时进行一次全局查找,保证查找的正确性。可是进行全局查找会很慢,由于查找资源依赖信息的接口GetDependencies本质上实际上是对文本的查找(好比prefab中会以文本的形式记录prefab所引用资源的guiid和fileid),在不进行多线程查询优化的状况下这是一个很慢的过程,存储在机械硬盘上时会更慢。
2.进行一次全局查找生成缓存,在进行查找时直接读取缓存(在资源改动时会出现引用信息不许确的问题),在资源变更时须要更新缓存,保持查找的正确性,不过因为缓存的存在,在资源没有太大的改动的状况下,刷新速度较快。缓存
这里选择了方案二。多线程
引用信息的生成:
经过AssetDatabase.GetAllAssetPaths()获取项目中全部的资源路径。
经过AssetDatabase.GetDependencies()获取每个资源所依赖资源的信息。
通过这两步以后就有了全部资源的依赖信息了。
经过资源的依赖信息,咱们就能够生成全部资源的引用信息了。
缓存:
为了让缓存尽可能的小,因此缓存只保存每一个资源的guid、引用资源哈希值、依赖资源的信息。
其中引用资源哈希值时用于判断这个资源依赖的资源是否有修改,如有修改,则在刷新资源引用信息的时候须要从新读取这个资源的依赖信息,不然继续使用该信息。这个判断就是在资源改动较少时减小刷新时间的关键。
在记录依赖时,没有直接记录依赖资源的guid,而是记录了资源在缓存中下标的位置,从而进一步缩小缓存的大小。优化
主要使用了Unity自带的TreeView实现树形界面的展现。ui
项目连接:Reference Finder插件