Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


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.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 Asset Database will be unresponsive. For this reason, you should always place calls to
AssetDatabase.StartAssetEditing
and
AssetDatabase.StopAssetEditing
inside either a try-catch or try-finally block.
When automatic asset importing is paused, some
AssetDatabase
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
StopAssetEditing
. 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:
  • AssetDatabase.ImportAsset
  • AssetDatabase.MoveAsset
  • AssetDatabase.CopyAsset
  • AddObjectToAsset
Unity supports nested calls to
StartAssetEditing
and
StopAssetEditing
. The total number of calls to each method must be equal for automatic import to resume. This is tracked with a counter, where calling
StartAssetEditing
increments the counter and calling
StopAssetEditing
decrements the counter. If your code has more calls to
StartAssetEditing
than
StopAssetEditing
, automatic import won't resume. If there are more calls to
StopAssetEditing
than to
StartAssetEditing
, this causes an error.
An alternative way of pausing and resuming asset database imports is to use the AssetDatabase.AssetEditingScope class in a
using
statement.
Additional Resources: AssetDatabase.AssetEditingScope