- 前言
- 【Unity 实用插件篇】| ReferenceFinder 引用查找插件,提高引擎查找使用效率
- 一、ReferenceFinder 介绍
- 二、使用示例
- 三、实现方案
- 3.1 方案选择
- 3.2 查找及缓存
- 3.3 界面实现
- 总结
前言
ReferenceFinder
是一个比较小众的插件,主要用来查找资源引用和依赖的插件。- 可以使用该插件很轻松的在项目中找到游戏对象精确的引用信息。
- 简单易用、非常轻量化,只由三个脚本完成,直接将文件夹拖到项目中即可使用,本文就来介绍一下
ReferenceFinder
的简单使用方法!
【Unity 实用插件篇】| ReferenceFinder 引用查找插件,提高引擎查找使用效率
一、ReferenceFinder 介绍
这是一个用来查找资源引用和依赖的插件,通过缓存来保存资源间的引用信息,通过树状结构直观的展示。
由于是通过缓存进行实现的,所以在希望的到精确的引用信息时需要刷新缓存。不过由于缓存的存在,在资源改动较少的情况下,刷新速度直接将文件夹拖到项目中即可使用。
- GitHub下载地址:ReferenceFinder
- CSDN下载:ReferenceFinder
二、使用示例
正常在Unity工程中的文件通过右键只有一个调用Find References In Scene
用于在本场景中查找该物体,但是这个功能不能说一点用没有吧,只能说非常的鸡肋。
在Hierarchy窗口的搜索框输入对象的名称一样可以完成类似查找,而且Hierarchy窗口的搜索框还支持按类型和按名称查找,这样就更显得Find References In Scene一无是处了。
而导入该插件后右键对象会多出来一个选项Find References In Project
,此时右键需要查找引用的文件或文件夹,点击 Find References In Project
进行查找。
此时会弹出一个窗口,此窗口可以显示所有用到该对象的场景及该对象身上的所有引用,并且点击其结构下的脚本或文件也可以直接跳转到工程中对应对象所属的文件文木。
窗口菜单按钮含义:
菜单按钮 | 介绍 |
---|---|
Refresh Data | 刷新缓存 |
Model | 切换引用和依赖 |
NeedUpdateState | 是否需要根据当前文件的状态更新State栏。 |
Expand | 展开列表 |
Collapse | 折叠列表 |
第三列的State为Changed代表这个资源被修改了,Missing代表资源被删除了,No Data代表缓存中没有该资源的信息。
三、实现方案
3.1 方案选择
- 在每次需要查找时进行一次全局查找,保证查找的正确性。但是进行全局查找会很慢,因为查找资源依赖信息的接口GetDependencies本质上其实是对文本的查找(比如prefab中会以文本的形式记录prefab所引用资源的guiid和fileid),在不进行多线程查询优化的情况下这是一个很慢的过程,存储在机械硬盘上时会更慢。
- 进行一次全局查找生成缓存,在进行查找时直接读取缓存(在资源改动时会出现引用信息不准确的问题),在资源变动时需要更新缓存,保持查找的正确性,不过由于缓存的存在,在资源没有太大的改动的情况下,刷新速度较快。
这里选择了方案二。
3.2 查找及缓存
引用信息的生成:
通过AssetDatabase.GetAllAssetPaths()获取项目中所有的资源路径。
通过AssetDatabase.GetDependencies()获取每一个资源所依赖资源的信息。
经过这两步之后就有了所有资源的依赖信息了。
通过资源的依赖信息,我们就可以生成所有资源的引用信息了。
缓存:
为了让缓存尽量的小,所以缓存只保存每个资源的guid、引用资源哈希值、依赖资源的信息。
其中引用资源哈希值时用于判断这个资源依赖的资源是否有修改,若有修改,则在刷新资源引用信息的时候需要重新读取这个资源的依赖信息,否则继续使用该信息。这个判断就是在资源改动较少时减少刷新时间的关键。
在记录依赖时,没有直接记录依赖资源的guid,而是记录了资源在缓存中下标的位置,从而进一步缩小缓存的大小。
3.3 界面实现
主要使用了Unity自带的TreeView实现树形界面的展示。
总结
- 使用该插件可以让我们在一个复杂的项目中快速查找某个对象的所有用到的场景及其身上的所有引用。
- 利用好该插件不但可以提高我们查找对象引用的效率,还可以用于项目垃圾清理,更快速的处理一些废弃的资源文件。
🎬 博客主页:https://xiaoy.blog.csdn.net
🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉
🎄 学习专栏推荐:Unity系统学习专栏
🌲 游戏制作专栏推荐:游戏制作
🌲Unity实战100例专栏推荐:Unity 实战100例 教程
🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📆 未来很长,值得我们全力奔赴更美好的生活✨
------------------❤️分割线❤️-------------------------
资料白嫖,技术互助
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Unity系统学习专栏 🧡 | 入门级 | 本专栏从Unity入门开始学习,快速达到Unity的入门水平 |
💛 Unity实战类项目 💛 | 进阶级 | 计划制作Unity的 100个实战案例!助你进入Unity世界,争取做最全的Unity原创博客大全。 |
❤️ 游戏制作专栏 ❤️ | 难度偏高 | 分享学习一些Unity成品的游戏Demo和其他语言的小游戏! |
💚 游戏爱好者万人社区💚 | 互助/吹水 | 数万人游戏爱好者社区,聊天互助,白嫖奖品 |
💙 Unity100个实用技能💙 | Unity查漏补缺 | 针对一些Unity中经常用到的一些小知识和技能进行学习介绍,核心目的就是让我们能够快速学习Unity的知识以达到查漏补缺 |