unity引用查詢外掛-ReferenceFinder
簡介
這是一個用來查詢資源引用和依賴的外掛,通過快取來儲存資源間的引用資訊,通過樹狀結構直觀的展示。
由於是通過快取進行實現的,所以在希望的到精確的引用資訊時需要重新整理快取。不過由於快取的存在,在資源改動較少的情況下,重新整理速度較快,對使用影響較小。
直接將資料夾拖到專案中即可使用。
使用示例
右鍵需要查詢引用的檔案或資料夾,點選Find References進行查詢。

按鈕含義:
RefreshData:重新整理快取
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