Объявление
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));
}
}
}