Unity 6.3
0 онлайн 2 гостей 3 в системе
Вход

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)); } } }