diff --git a/Editor/Animation/AnimationDatabase.cs b/Editor/Animation/AnimationDatabase.cs index 6c35e7df..f9ef2335 100644 --- a/Editor/Animation/AnimationDatabase.cs +++ b/Editor/Animation/AnimationDatabase.cs @@ -9,6 +9,7 @@ using nadena.dev.ndmf; using UnityEditor; using UnityEditor.Animations; using UnityEngine; +using UnityEngine.Profiling; using BuildContext = nadena.dev.ndmf.BuildContext; #if MA_VRCSDK3_AVATARS using VRC.SDK3.Avatars.Components; @@ -192,7 +193,11 @@ namespace nadena.dev.modular_avatar.animation var clipHolder = RegisterMotion(state.motion, state, processClip, _originalToHolder); state.motion = clipHolder.CurrentClip; - _clipCommitActions.Add(() => { state.motion = clipHolder.CurrentClip; }); + _clipCommitActions.Add(() => + { + state.motion = clipHolder.CurrentClip; + MaybeSaveClip(clipHolder.CurrentClip); + }); } internal void ForeachClip(Action processClip) @@ -368,6 +373,8 @@ namespace nadena.dev.modular_avatar.animation children[i].motion = curClip; dirty = true; } + + MaybeSaveClip(curClip); } if (dirty) @@ -379,5 +386,23 @@ namespace nadena.dev.modular_avatar.animation return treeHolder; } + + private void MaybeSaveClip(Motion curClip) + { + Profiler.BeginSample("MaybeSaveClip"); + if (curClip != null && !EditorUtility.IsPersistent(curClip) && EditorUtility.IsPersistent(_context.AssetContainer) && _context.AssetContainer != null) + { + try + { + AssetDatabase.AddObjectToAsset(curClip, _context.AssetContainer); + } + catch (Exception e) + { + Debug.LogException(e); + throw; + } + } + Profiler.EndSample(); + } } } \ No newline at end of file diff --git a/Editor/Animation/DeepClone.cs b/Editor/Animation/DeepClone.cs index 4667733a..e84bac6f 100644 --- a/Editor/Animation/DeepClone.cs +++ b/Editor/Animation/DeepClone.cs @@ -93,6 +93,11 @@ namespace nadena.dev.modular_avatar.animation { ObjectRegistry.RegisterReplacedObject(original, obj); } + + if (_isSaved && !EditorUtility.IsPersistent(obj)) + { + AssetDatabase.AddObjectToAsset(obj, _combined); + } return (T)obj; }