AssetDatabase.StartAssetEditing
Declaration
public static void StartAssetEditing();Описание
Приостанавливает автоматический импорт ресурсов, позволяя группировать несколько импортов ресурсов в один более крупный импорт.
Этот метод позволяет вам приостановить автоматический импорт новых или изменённых ассетов в Базу данных ассетов. Это полезно, если вы хотите выполнять действия с помощью скрипта, которые совершают множественные изменения ассетов без импортирования каждого изменения в отдельном процессе импортирования в Базу данных ассетов.
Вместо этого вы можете приостановить импорт, внести множественные изменения, а затем возобновить импорт, что означает, что Unity выполняет только один процесс ввода для всех изменений, которые вы сделали, когда импорт был приостановлен. Следующий пример демонстрирует это:
using UnityEngine; using UnityEditor;
public class StartStopAssetEditingExample : MonoBehaviour { [MenuItem("APIExamples/StartStopAssetEditing")] static void CallAssetDatabaseAPIsBetweenStartStopAssetEditing() { try { //Place the Asset Database in a state where //importing is suspended for most APIs AssetDatabase.StartAssetEditing();
AssetDatabase.CopyAsset("Assets/CopyAsset.txt", "Assets/Text/CopyAsset.txt"); AssetDatabase.MoveAsset("Assets/MoveAsset.txt", "Assets/Text/MoveAsset.txt"); } finally { //By adding a call to StopAssetEditing inside //a "finally" block, we ensure the AssetDatabase //state will be reset when leaving this function AssetDatabase.StopAssetEditing(); } } }
AssetDatabase.StartAssetEditing переводит базу данных ассетов в состояние, которое запрещает импорт, пока не будет вызван AssetDatabase.StopAssetEditing. Это означает, что если между двумя вызовами функций произойдет исключение, База данных ассетов не будет отвечать. По этой причине вы всегда должны размещать вызов AssetDatabase.StartAssetEditing и AssetDatabase.StopAssetEditing внутри блока try-catch или try-finally.
Когда автоматический импорт ассетов приостановлен, некоторые AssetDatabase API будут работать не так, как ожидается. Дело в том, что ассеты, созданные в приостановленном состоянии, не попадают в базу данных ассетов полностью до вызова StopAssetEditing. Как правило, вы должны ограничить пакетные операции теми, которые не требуют полного импорта ассетов. Поддерживаемые и рекомендуемые методы пакетирования:
-
AssetDatabase.ImportAsset -
AssetDatabase.MoveAsset -
AssetDatabase.CopyAsset -
AddObjectToAsset
Unity поддерживает вложенные вызовы StartAssetEditing и StopAssetEditing. Общее число вызовов каждого метода должно быть равным для возобновления автоматического импорта. Это отслеживается счетчиком, где вызов StartAssetEditing увеличивает счетчик и вызывает StopAssetEditing Если в вашем коде больше вызовов, то StartAssetEditing чем StopAssetEditing, автоматический импорт не будет возобновлен. Если есть больше вызовов StopAssetEditing чем до StartAssetEditing, это вызывает ошибку.
Альтернативным способом приостановки и возобновления импорта базы данных ассетов является использование AssetEditingScope class in a using заявление.
Дополнительные ресурсы: AssetEditingScope