? ? ? ? 需求上很簡單,就是在編輯器下,找到某個制定文件下的所有特定資源(UnityEngine.Object)。Unity 沒有提供專門的 API,我一開始想在網上搜索代碼,發現沒有現成可以直接用的。
? ? ? ? 功能實現本身并不復雜,代碼也比較直觀:
/// <summary>/// 查找在某個文件夾下的所有類型資源/// </summary>/// <typeparam name="T"></typeparam>/// <param name="folder">工程中文件夾相對路徑</param>/// <param name="result">返回搜索的結果</param>public static void FindAssetInFolder<T>(string folder, List<T> result) where T : Object{if (result == null)result = new List<T>();result.Clear();//定位到指定文件夾if (!Directory.Exists(folder))return;var directory = new DirectoryInfo(folder);//查詢該文件夾下的所有文件;var files = directory.GetFiles();int length = files.Length;for (int i = 0; i < length; i++){var file = files[i];//跳過Unity的meta文件(后綴名為.meta)if (file.Extension.Contains("meta"))continue;//根據路徑直接拼出對應的文件的相對路徑string path = $"{folder}/{file.Name}";var asset = AssetDatabase.LoadAssetAtPath<T>(path);if (asset != null)result.Add(asset);}}
? ? ? ? 其實就是借用 System.IO 的代碼,輔助實現了編輯器下的查詢。唯一值得注意的就是文件夾的路徑需要傳入一個相對路徑。
? ? ? ? 我的工程對應的 Unity 版本為 2020.3.48f1。