Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

AssetDatabase.FindAssets

Объявление

public static string[] FindAssets(string filter);

public static string[] FindAssets(string filter, string[] searchInFolders);

Параметры

filter Строка фильтра может содержать данные поиска. Подробнее об этой строке см. ниже..
searchInFolders Папки, в которых начнется поиск.

Возвращает

string[] Массив соответствующих активов. Обратите внимание, что идентификаторы GUID будут возвращены. Если подходящие активы не найдены, возвращает пустой массив.

Описание

Выполните поиск в базе данных активов, используя строку фильтра поиска.

FindAssets позволяет искать активы. Аргумент строка может предоставлять имена, метки или типы (имена классов). Строка фильтра может включать:

Имя: фильтрация ресурсов по имени файла (без расширения). Слова, разделенные пробелами, обрабатываются как поиск отдельных имен. Так, например, "тестовый актив" — это имя актива, который будет искаться. Обратите внимание, что имя может использоваться для идентификации актива. Кроме того, имя, используемое в фильтре string, может быть указано как подраздел. Например, приведенный выше пример тестового объекта можно сопоставить с помощью test.

Ярлыки. К объектам могут быть прикреплены ярлыки. Активы с определенными метками можно найти, используя ключевое слово «l:» перед каждой меткой. Это указывает на то, что строка ищет ярлыки.

Типы: поиск ресурсов на основе явно определенных типов. Ключевое слово 't:' используется как способ указать, что ищутся типизированные активы. Если в фильтр string включено более одного типа, будут возвращены ресурсы, соответствующие одному классу. Типы могут быть либо встроенными типами, такими как Texture2D, либо созданными пользователем классами сценариев. Пользовательские классы — это активы, созданные из класса ScriptableObject в проекте. Если нужны все активы, используйте Object, так как все активы происходят от Object. Указание одной или нескольких папок с помощью аргумента searchInFolders ограничит поиск этими папками и их дочерними папками. Это быстрее, чем искать все ресурсы во всех папках.

Примечание. При поиске не учитывается регистр.

Используйте 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.

// Этот файл сценария имеет два класса CS. Первый — это простой скрипт Unity ScriptableObject. // Определяемый им класс используется классом-примером ниже. // (Это один файл скрипта Unity. Вы можете разделить этот файл на ScriptObj.cs и // Более структурированный файл Example.cs.) 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)); } } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3