diff --git a/Editor/API/Serialization/AssetSaver.cs b/Editor/API/Serialization/AssetSaver.cs index e2eb902c..cb44f9e0 100644 --- a/Editor/API/Serialization/AssetSaver.cs +++ b/Editor/API/Serialization/AssetSaver.cs @@ -77,7 +77,7 @@ internal AssetSaver(string generatedAssetsRoot, string avatarName, int assetsPer var rootAssetPath = AssetDatabase.GenerateUniqueAssetPath(rootPath + "/" + avatarName + ".asset"); _rootAsset = ScriptableObject.CreateInstance(); AssetDatabase.CreateAsset(_rootAsset, rootAssetPath); - _currentSubContainer = CreateAssetContainer(); + _currentSubContainer = CreateAssetContainer(inAssetEditing: true); _assetCount = 0; } @@ -116,12 +116,29 @@ public void SaveAsset(UnityEngine.Object? obj) _assetCount++; } - private SubAssetContainer CreateAssetContainer(string name = "assets") + private SubAssetContainer CreateAssetContainer(string name = "assets", bool inAssetEditing = false) { var subContainerPath = AssetDatabase.GenerateUniqueAssetPath(subAssetPath + "/" + name + ".asset"); var subContainer = ScriptableObject.CreateInstance(); - AssetDatabase.CreateAsset(subContainer, subContainerPath); - + try + { + AssetDatabase.CreateAsset(subContainer, subContainerPath); + } + catch (UnityException e) + { + // Sometimes this fails with "Global asset import parameters have been changed during import. + // Importing is restarted." - in this case, try creating it a second time + Debug.Log("Retrying asset creation due to " + e); + + if (inAssetEditing) + { + AssetDatabase.StopAssetEditing(); + AssetDatabase.StartAssetEditing(); + } + + AssetDatabase.CreateAsset(subContainer, subContainerPath); + } + _containers.Add(subContainer); return subContainer;