2022年2月23日 星期三

Unity 搜尋2021.2大耀進

原文:https://blog.unity.com/technology/the-latest-in-search-unity-20212

過去一年裡,Unity 的搜索功能經歷了極大的轉變。除了能按名稱找尋物件的 Quick Search 套件,還有更為精細的核心搜索功能,能保存與查看搜索結果,並使用類似 LINQ 的語言來做複雜搜索。

*安裝Quick Search 可以從 Project Settings啓用 Preview Packages 選項後從Package manager安裝。


改進後的數據排列


今天介紹的 Asset Indexing System(資源索引系統)比以往更好用。初次排列佔用更少的時間和空間,而且還支援在 Index Manager(Window > Search > IndexManager )中自訂擴充索引量。


像圖中一樣啓用列表中的 Properties 和 Dependencies,你就可以更充分地利用新的 Search Picker 和 Table。


搜索記錄組織


另一個重大改進是超好用的搜索記錄(Save Searches)。由於重復地搜索很麻煩,所以我們為搜索記錄加了新的組織選(Search Organization)。





新選項包含:只顯示在個人頁面的 User Searches(保存為偏好設定),以及所有專案參與人共享的 Project Searches (保存為專案資源)。你可以為結果設定圖標,並在新窗口中打開搜索結果。搜索窗口的狀態將被保留,搜索資料、圖標大小(特別是 Table layout)和打開的搜索欄將始終被恢復。



Search Table視圖


搜索窗口允許以多種方式可視化對象,包括列表、大圖標列表及多種尺寸的塊狀視圖,如下圖所示。





Unity 2021.2 支援在 Table 中可視化查詢結果:





你可以按名稱或描述來進行排序,甚至能用 Search Expression(搜索表達式)來找文件屬性,產生類似下方的列表:





當然,這些花時間弄的列表也是可以保存的。之前提到整個搜索窗口狀態將持續保留,這其中也包括這些列表格局。你甚至可以建立自己的資源管理器,同時比對多個文件的屬性值。





在建立好一個列表格局後,你可以點 Save 按鈕將詳細的報告保存為 CSV 或 JSON 文件,方便審查和比較同一專案的各個版本內容。





Search Picker

本功能更能滿足專業 Unity 開發者的需求。Unity 現在可以用搜索窗口用更為複雜的搜索指令來讓搜索更加精確。你可以在程式碼中指明搜索所涉及的腳本屬性。

先為任意參考屬性加上 [SearchContextAttribute] 特性,再指定每次搜索的 Search Provider,來發起一次範圍更小的初始搜索,或設定 Search View Flags 來更改 Search Picker 的外貌。


上方設定結果看起來會像這樣:




Search Picker 視圖預設顯示格式


搜索表達式

最後,我們加入了搜索表達式的概念。搜索表達式可讓搜索更強大。那它究竟能幫你做些什麼呢?

  1. 你能用它來發起一次交叉比對多個 Search Provider 的搜索,或同時發起多次搜索。 比如說,顯示場景內所有著色器無法編譯的物件。
  2. 在搜索中轉換和篩選結果,表達式非常像 LINQ 加上 SQL 加上 Lisp(S-Expression 句法)。
    sort{count{...groupby{a:assets, @type}}, @value, desc}
    select{t:LODGroup, @lodsize}
  3. 在 Search Table 中就能做複雜的搜索,並將結果列為表格。Search Expression 可用作長期整合或驗證系統的基礎。

當然 Search Expression 的句法非常多,你可能會在搜索時用到以下內容:

找出所有帶有「rock」貼圖的Prefab:

t:prefab ref={t:texture rock}

這時搜尋系統將根據 t:texturerock 開始找,然後到所有貼圖上查 t:prefabref=,最後匯總並顯示結果。


找出專案中的資源種類數:

count{t={distinct{select{a:assets, @type}}}}


求出專案中所有 LODGroup 設定文件的平均 LODSize:


avg{select{t:LODGroup, @lodsize}}


通常大括號就代表著搜索表達式。而前綴 avg、 select、 distinct 則表達搜索結果的處理方法。求值過程執行於Unity的背景,無論搜索有多複雜、數據有多大,搜索不會導致無回應的情況。


搜索功能同樣支援保存非常長的搜索表達式,方便下次使用。






反饋


本文介紹的功能都在 Unity 編輯器文件中有說明。

並且,我們還製作了多個搜索功能範例和幾種基於 Search 功能打造的工具,並上傳到 GitHub 供大家下載使用。

我們的 Wiki 百科還收錄了幾篇非常不錯的搜索功能文章,其中有一篇詳細解讀了更為精密的搜索表達式


Query Examples 頁面還偷放了 2022.1 新搜索功能的預覽。





歡迎大家下載體驗。


1 則留言:

著作人