Version: 2023.1

AssetDatabase.StartAssetEditing

切换到手册
public static void StartAssetEditing ();

描述

Places the Asset Database into a state that temporarily prevents automatic import, allowing you to group several asset imports together into one larger import.

This method allows you to pause the Asset Database's automatic import of new or modified assets. This is useful if you want to perform actions via script that make multiple changes to assets without the Asset Database importing each change in a separate import process.

Instead, you can pause imports, make multiple changes, then resume imports, which means Unity will only perform one input process for all the changes you made while the importing was paused, as demonstrated in this example:

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

Note: AssetDatabase.StartAssetEditing places the Asset Database in a state that prevents imports until AssetDatabase.StopAssetEditing is called. This means that if an exception occurs between the two function calls, the AssetDatabase will be unresponsive. For this reason, you should always place calls to AssetDatabase.StartAssetEditing and AssetDatabase.StopAssetEditing inside either a try..catch block, or a try..finally block as needed.

Also note: In the paused state between AssetDatabase.StartAssetEditing and AssetDatabase.StopAssetEditing, some AssetDatabase APIs won't work as expected. This is because assets created during the paused state are not fully created in the asset database before the call to StopAssetEditing. As a rule of thumb you should postpone the use of more involved AssetDatabase APIs until after the AssetDatabase.StopAssetEditing call and reserve the AssetDatabase.StartAssetEditing/AssetDatabase.StopAssetEditing scope for operations that do not require the assets involved to be fully imported.

A similar alternative way of pausing and resuming asset database imports is available, by using the AssetDatabase.AssetEditingScope class in a using statement.