[[Загрузка файлов|Стартовая страница]]
`AssetDatabase` доступен только в редакторе Unity и не работает в билдах (экспортированных версиях игр).
`AssetDatabase` в Unity – это класс из пространства имён `UnityEditor`, который предоставляет API для работы с ассетами внутри редактора Unity. Он позволяет выполнять такие операции, как загрузка, поиск, создание, удаление и перезагрузка ассетов (ресурсов) прямо в редакторе.
### Особенности
- API подходит для автоматизации задач, таких как массовое обновление, модификация и упрощение создания ресурсов.
- Если Вы работаете с большим количеством ассетов, правильное использование методов `AssetDatabase` поможет избежать избыточного потребления ресурсов, т.к. методы `LoadAssetAtPath` и `FindAssets` оптимизированы для работы с ассетами напрямую на диске.
### Основные возможности `AssetDatabase`
1. **Загрузка и поиск ассетов:**
- `LoadAssetAtPath<T>(string assetPath)`: загружает ассет из указанного пути.
- `FindAssets(string filter, string[] searchInFolders = null)`: возвращает массив GUID ассетов, соответствующих фильтру. Используется для поиска ассетов по типу, имени или другим атрибутам.
2. **Создание и управление ассетами:**
- `CreateAsset(Object asset, string path)`: создаёт новый ассет на диске и сохраняет его по указанному пути.
- `DeleteAsset(string path)`: удаляет ассет по указанному пути.
- `ImportAsset(string path)`: импортирует ассет в проект. Полезно, когда ассет изменён на диске, и нужно обновить его внутри редактора.
3. **Работа с путями и GUID:**
- `AssetPathToGUID(string path)`: возвращает уникальный GUID ассета по его пути.
- `GUIDToAssetPath(string guid)`: преобразует GUID в путь ассета. Это полезно для связи ассетов с их представлением в системе контроля версий или для поиска ассетов без указания пути.
4. **Обновление и рефреш ассетов:**
- `Refresh()`: обновляет состояние всех ассетов в редакторе, чтобы отразить изменения, произошедшие вне Unity.
- `SaveAssets()`: сохраняет все изменения, сделанные в ассетах.
### Пример использования
Допустим, Вам нужно найти все текстуры в папке `Assets/Textures` и загрузить их:
```csharp
using UnityEditor;
using UnityEngine;
public class TextureLoader
{
public static void LoadAllTextures()
{
// Ищем все текстуры в папке
string[] guids = AssetDatabase.FindAssets("t:Texture", new[] { "Assets/Textures" });
foreach (string guid in guids)
{
string path = AssetDatabase.GUIDToAssetPath(guid);
Texture texture = AssetDatabase.LoadAssetAtPath<Texture>(path);
// Делаем что-то с текстурой (например, выводим её имя)
Debug.Log("Loaded texture: " + texture.name);
}
}
}
```