简介

  这是一个用来查找资源引用和依赖的插件,通过缓存来保存资源间的引用信息,通过树状结构直观的展示。
  由于是通过缓存进行实现的,所以在希望的到精确的引用信息时需要刷新缓存。不过由于缓存的存在,在资源改动较少的情况下,刷新速度较快,对使用影响较小。
  直接将文件夹拖到项目中即可使用。

使用示例

  右键需要查找引用的文件或文件夹,点击Find References进行查找。

按钮含义:
Refresh Data:刷新缓存
Model:切换引用和依赖
NeedUpdateState:是否需要根据当前文件的状态更新State栏。
Expand:展开列表
Collapse:折叠列表


  第三列的State为Changed代表这个资源被修改了,Missing代表资源被删除了,No Data代表缓存中没有该资源的信息。

实现方案

方案选择

  1.在每次需要查找时进行一次全局查找,保证查找的正确性。但是进行全局查找会很慢,因为查找资源依赖信息的接口GetDependencies本质上其实是对文本的查找(比如prefab中会以文本的形式记录prefab所引用资源的guiid和fileid),在不进行多线程查询优化的情况下这是一个很慢的过程,存储在机械硬盘上时会更慢。
  2.进行一次全局查找生成缓存,在进行查找时直接读取缓存(在资源改动时会出现引用信息不准确的问题),在资源变动时需要更新缓存,保持查找的正确性,不过由于缓存的存在,在资源没有太大的改动的情况下,刷新速度较快。

  这里选择了方案二。

查找及缓存

引用信息的生成:
  通过AssetDatabase.GetAllAssetPaths()获取项目中所有的资源路径。
  通过AssetDatabase.GetDependencies()获取每一个资源所依赖资源的信息。
  经过这两步之后就有了所有资源的依赖信息了。
  通过资源的依赖信息,我们就可以生成所有资源的引用信息了。
缓存:
  为了让缓存尽量的小,所以缓存只保存每个资源的guid、引用资源哈希值、依赖资源的信息。
  其中引用资源哈希值时用于判断这个资源依赖的资源是否有修改,若有修改,则在刷新资源引用信息的时候需要重新读取这个资源的依赖信息,否则继续使用该信息。这个判断就是在资源改动较少时减少刷新时间的关键。
  在记录依赖时,没有直接记录依赖资源的guid,而是记录了资源在缓存中下标的位置,从而进一步缩小缓存的大小。

界面实现

  主要使用了Unity自带的TreeView实现树形界面的展示。

项目链接:Reference Finder

unity引用查找插件-ReferenceFinder的更多相关文章

  1. Unity时钟定时器插件

    Unity时钟定时器插件 http://dsqiu.iteye.com/blog/2020603https://github.com/joserocha3/KillerCircles/blob/67a ...

  2. Unity的NGUI插件篇——入场效果

    Unity的NGUI插件篇--入场效果 入场效果 入场效果须要借助于NGUI提供的TweenPosition类来完毕.为了说明此类的用法.本节将使会解说两个演示样例.本文选自  大学霸 <NGU ...

  3. 记录一个Unity播放器插件的开发

    背景 公司最近在做VR直播平台,VR开发我们用到了Unity,而在Unity中播放视频就需要一款视频插件,我们调研了几个视频插件,记录两个,如下: Unity视频插件调研 网上搜了搜,最流行的有以下两 ...

  4. Curved UI - VR Ready Solution To Bend Warp Your Canvas 1.7,1.8,2.2,2.3 四种版本压缩包(Unity UGUI曲面插件),可以兼容VRTK

    Curved UI - VR Ready Solution To Bend Warp Your Canvas 1.7,1.8,2.2,2.3 四种版本压缩包(Unity UGUI曲面插件) 可以兼容V ...

  5. Unity时钟定时器插件——Vision Timer源码分析之二

      Unity时钟定时器插件——Vision Timer源码分析之二 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处:http.dsqiu.iteye.com 前面的已经介绍了vp_T ...

  6. 在Unity中查找缺失的引用

    这篇博客是查找unity中缺失引用的一个简单简短的解决方案.你可以从GitHub上获取源码. 缺失引用 一个丢失引用与没有引用(在检视表显示“None”)是完全不同的概念.这些友各种原因造成,比如:把 ...

  7. [Unity工具]查找GameObject在场景中所有被引用的地方

    参考链接: https://blog.csdn.net/hjzyzr/article/details/53316919?utm_source=blogxgwz4 https://blog.csdn.n ...

  8. UNITY技巧-查找脚本被哪个场景引用

  9. 关于Unity中DOTween插件的使用(专题一)

    DOTween flash里面的一个概念叫补间动画,DOTween就是干这个事情的. 补间动画:在1秒钟之内从A点移动到B点,在这个之间会把动画补间补好. 当我们安装好DOTween后,它就会提供很多 ...

随机推荐

  1. SSO的定义、原理、组件及应用

    定义: https://baike.baidu.com/item/SSO/3451380 原理: https://blog.csdn.net/cutesource/article/details/58 ...

  2. java collections - keyset() vs entrySet() in map

    https://stackoverflow.com/questions/8962459/java-collections-keyset-vs-entryset-in-map http://blog.c ...

  3. Eclipse使用Maven2的一次环境清理记录

    1. C:\Users\Administrator\.m2\repository\com\yuanchuangyun\[module,yuanchuangyun-*]相关目录全删除.2. D:\wor ...

  4. WebLogic: 内存溢出

    每次部署完项目,重启Weblogic服务,总是遇到java.lang.OutOfMemoryError: PermGen space,其实物理内存也是够的,当时的解决方法就是多重启几次Weblogic ...

  5. Oracle PLSQL 客户端 连接Oracle12.2 出现权限问题的解决办法以及绿色版Oracle客户端的使用.

    1. 同事反馈登录最新的oracle12.2 的数据库时登录不上报错: 2. 记得当时查过资料, Oracle 在12.2 增加了客户端连接数据库的加密级别 比较早的oracle客户端比如11.2.0 ...

  6. [转帖] infiniband的协议速度

  7. jquery 祖先、子孫、同級

    jquery向上遍歷,獲取祖先元素 parent()獲取選中元素的父 parents()獲取選中元素的所有的祖先節點,一直到文檔的根元素<html> parentUntil(“元素1”)獲 ...

  8. java 获取 T.class

    转载:http://www.hankcs.com/program/t-class.html @Test public void Test() throws Exception{ Foo<User ...

  9. ef 仓储模式

    构建一个仓储模式. Model 大家自己创建就行了,上个图,就不多说了(我是code first) IDAL namespace IDAL { public interface IBaseReposi ...

  10. EF 事务

    http://yanwushu.byethost7.com/?p=87 1. EF对事务进行了封装:context的saveChange()是有事务性的. 2. 依赖多个不同的Context的操作(即 ...