StartAssetEditing()
Pauses automatic asset import, allowing you to group several asset imports together into one larger import.
Read time 2 minutesLast updated 4 days ago
Definition
- Type: Method
- Namespace: UnityEditor
- Assembly: UnityEditor
public static void StartAssetEditing()
Remarks
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 only performs one input process for all the changes you made while the importing was paused. The following example demonstrates this:
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.StartAssetEditingAssetDatabase.StartAssetEditingAssetDatabase.StopAssetEditingWhen automatic asset importing is paused, some APIs won't work as expected. This is because assets created during the paused state aren't fully created in the asset database before the call to . As a rule of thumb you should limit your batch operations to those that don't require the assets involved to be fully imported. Supported and recommended methods for batching are:
AssetDatabaseStopAssetEditingAssetDatabase.ImportAssetAssetDatabase.MoveAssetAssetDatabase.CopyAssetAddObjectToAsset
Unity supports nested calls to and . The total number of calls to each method must be equal for automatic import to resume. This is tracked with a counter, where calling increments the counter and calling decrements the counter. If your code has more calls to than , automatic import won't resume. If there are more calls to than to , this causes an error.
StartAssetEditingStopAssetEditingStartAssetEditingStopAssetEditingStartAssetEditingStopAssetEditingStopAssetEditingStartAssetEditingAn alternative way of pausing and resuming asset database imports is to use the AssetDatabase.AssetEditingScope class in a statement.
usingAdditional Resources: AssetDatabase.AssetEditingScope