這是一個用來查找資源引用和依賴的插件,經過緩存來保存資源間的引用信息,經過樹狀結構直觀的展現。
因爲是經過緩存進行實現的,因此在但願的到精確的引用信息時須要刷新緩存。不過因爲緩存的存在,在資源改動較少的狀況下,刷新速度較快,對使用影響較小。
直接將文件夾拖到項目中便可使用。
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插件