AssetDatabase.FindAssets
Declaration
public static string[] FindAssets(string filter);public static string[] FindAssets(string filter, string[] searchInFolders);Параметры
| Параметр | Описание |
|---|---|
| фильтр | Строка фильтра может содержать данные поиска. Подробнее об этой строке см. ниже. |
| searchInFolders | Папки для выполнения поиска. Unity ищет в этой папке и в любых дочерних папках. Если не указано, Unity ищет в папках Assets и Packages вашего проекта. |
Возвращаемое значение
string[] Массив, содержащий GUIDs любых соответствующих ассетов в строковом формате. Если соответствующих ассетов не найдено, возвращается пустой массив.
Описание
Поиск в базе данных ассетов с помощью строки фильтра поиска.
FindAssets позволяет вам искать ассеты. string аргумент может предоставлять имена, метки или типы (имена классов). Строка фильтра может включать:
Имя: Фильтрация ресурсов по имени файла (без расширения). Слова, разделенные пробелом, рассматриваются как отдельные запросы по имени. Например, "test asset", это для двух поисков имен, один ищет соответствие с test и другой с asset. Вы также можете выполнять частичные поиски. Например, вы можете соответствовать MyAwesomeTexture поиском awesome.
Этикетки (l:): К ассетам могут быть прикреплены метки. Используйте ключевое слово 'l:' перед каждой меткой для поиска ассетов по их меткам.
Типы (т:)Используйте ключевое слово 't:' Если в фильтре указано несколько типов, то выберите один из них и нажмите string то будут возвращены ассеты, соответствующие одному классу. Типы могут быть как встроенными — например, Texture2D или классы скриптов, созданные пользователем. Пользовательские классы — это ассеты, созданные в проекте на основе класса ScriptableObject. Если нужны все ассеты, используйте Object в качестве типа, поскольку все ассеты происходят от объекта. Указание одной или нескольких папок с помощью searchInFolders аргумент ограничивает поиск этими папками и их дочерними папками. Это быстрее, чем поиск всех ассетов во всех папках.
AssetBundles (b:)Используйте ключевое слово 'b:' чтобы найти ассеты, которые являются частью AssetBundle.
Площадь (a:) : Найти ассеты в конкретном площадь действительными значениями являются: "all", "assets" и "packages". Используйте это, чтобы сделать ваш запрос более конкретным, используя 'a:' ключевое слово, за которым следует название района, чтобы ускорить поиск.
Глоббинг (глоб:): Используйте глобализацию для соответствия определенным правилам. glob: за которым следует запрос. Например, glob:Editor найдет все папки редактора в проекте, glob:(Editor|Resources) найдет все папки Редактор и Ресурсы в проекте, glob:Editor/* вернет все ассеты в папках редактора в проекте, в то время как glob:Editor/** возвратит все ассеты в папках редактора рекурсивно.
Примечание:
Поиск не зависит от регистра.
Использование AssetDatabase.GUIDToAssetPath чтобы получить пути ассетов и AssetDatabase.LoadAssetAtPath
для загрузки ассета.
using UnityEngine; using UnityEditor;
public class Example { [MenuItem("Example/FindAssets Example")] static void ExampleScript() { // Find all assets labelled with 'architecture' : string[] guids1 = AssetDatabase.FindAssets("l:architecture", null);
foreach (string guid1 in guids1) { Debug.Log(AssetDatabase.GUIDToAssetPath(guid1)); }
// Find all Texture2Ds that have 'co' in their filename, that are labelled with 'architecture' and are placed in 'MyAwesomeProps' folder string[] guids2 = AssetDatabase.FindAssets("co l:architecture t:texture2D", new[] {"Assets/MyAwesomeProps"});
foreach (string guid2 in guids2) { Debug.Log(AssetDatabase.GUIDToAssetPath(guid2)); } } }
В следующем примере скрипта показано, как можно найти подробности Имя, Метка и Тип, добавленные в Ассеты. FindAssets ассеты, созданные в этом примере, используют функцию ScriptObj class.
// This script file has two CS classes. The first is a simple Unity ScriptableObject script. // The class it defines is used by the Example class below. // (This is a single Unity script file. You could split this file into a ScriptObj.cs and an // Example.cs file which is more structured.)
using UnityEngine; using UnityEditor; using System.IO;
public class ScriptObj : ScriptableObject { public void Awake() { Debug.Log("ScriptObj created"); } }
// Use ScriptObj to show how AssetDabase.FindAssets can be used
public class Example { static ScriptObj testI; static ScriptObj testJ; static ScriptObj testK;
[MenuItem("Examples/FindAssets Example two")] static void ExampleScript() { CreateAssets(); NamesExample(); LabelsExample(); TypesExample(); }
static void CreateAssets() { if (!Directory.Exists("Assets/AssetFolder")) { AssetDatabase.CreateFolder("Assets", "AssetFolder"); }
if (!Directory.Exists("Assets/AssetFolder/SpecialFolder")) { AssetDatabase.CreateFolder("Assets/AssetFolder", "SpecialFolder"); }
testI = (ScriptObj)ScriptableObject.CreateInstance(typeof(ScriptObj)); AssetDatabase.CreateAsset(testI, "Assets/AssetFolder/testI.asset");
testJ = (ScriptObj)ScriptableObject.CreateInstance(typeof(ScriptObj)); AssetDatabase.CreateAsset(testJ, "Assets/AssetFolder/testJ.asset");
// create an asset in a sub-folder and with a name which contains a space testK = (ScriptObj)ScriptableObject.CreateInstance(typeof(ScriptObj)); AssetDatabase.CreateAsset(testK, "Assets/AssetFolder/SpecialFolder/testK example.asset");
// an asset with a material will be used later Material material = new Material(Shader.Find("Standard")); AssetDatabase.CreateAsset(material, "Assets/AssetFolder/SpecialFolder/MyMaterial.mat"); }
static void NamesExample() { Debug.Log("*** FINDING ASSETS BY NAME ***");
string[] results;
results = AssetDatabase.FindAssets("testI"); foreach (string guid in results) { Debug.Log("testI: " + AssetDatabase.GUIDToAssetPath(guid)); }
results = AssetDatabase.FindAssets("testJ"); foreach (string guid in results) { Debug.Log("testJ: " + AssetDatabase.GUIDToAssetPath(guid)); }
results = AssetDatabase.FindAssets("testK example"); foreach (string guid in results) { Debug.Log("testK example: " + AssetDatabase.GUIDToAssetPath(guid)); }
Debug.Log("*** More complex asset search ***");
// find all assets that contain test (which is all assets) results = AssetDatabase.FindAssets("test"); foreach (string guid in results) { Debug.Log("name:test - " + AssetDatabase.GUIDToAssetPath(guid)); } }
static void LabelsExample() { Debug.Log("*** FINDING ASSETS BY LABELS ***");
string[] setLabels;
setLabels = new string[] { "wrapper" }; AssetDatabase.SetLabels(testI, setLabels);
setLabels = new string[] { "bottle", "banana", "carrot" }; AssetDatabase.SetLabels(testJ, setLabels);
setLabels = new string[] { "swappable", "helmet" }; AssetDatabase.SetLabels(testK, setLabels);
// label searching: // testI has wrapper, testK has swappable, so both have 'app' // testJ has bottle, so have a label searched as 'bot' string[] getGuids = AssetDatabase.FindAssets("l:app l:bot"); foreach (string guid in getGuids) { Debug.Log("label lookup: " + AssetDatabase.GUIDToAssetPath(guid)); } }
static void TypesExample() { Debug.Log("*** FINDING ASSETS BY TYPE ***");
string[] guids;
guids = AssetDatabase.FindAssets("t:material"); foreach (string guid in guids) { Debug.Log("Material: " + AssetDatabase.GUIDToAssetPath(guid)); }
guids = AssetDatabase.FindAssets("t:Object l:helmet"); foreach (string guid in guids) { Debug.Log("ScriptObj+helmet: " + AssetDatabase.GUIDToAssetPath(guid)); } } }