From 38fdebfec3688a43a5433930420d383acd87fea3 Mon Sep 17 00:00:00 2001 From: GotoFinal Date: Tue, 9 Jan 2024 23:15:19 +0100 Subject: [PATCH] fix: Allow for saving inside prefabs, fixes #73 --- .../Editor/Detail/AV3/FxGenerator.cs | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/Packages/jp.suzuryg.face-emo/Editor/Detail/AV3/FxGenerator.cs b/Packages/jp.suzuryg.face-emo/Editor/Detail/AV3/FxGenerator.cs index 8f15624a..aca94887 100644 --- a/Packages/jp.suzuryg.face-emo/Editor/Detail/AV3/FxGenerator.cs +++ b/Packages/jp.suzuryg.face-emo/Editor/Detail/AV3/FxGenerator.cs @@ -114,19 +114,27 @@ public void Generate(IMenu menu, bool forceOverLimitMode = false) { throw new FaceEmoException("Failed to get MA root object."); } - + + var existingPrefabPath = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(rootObject); + var editableRootObject = rootObject; + if (!string.IsNullOrEmpty(existingPrefabPath)) + { + var existingPrefab = AssetDatabase.LoadAssetAtPath(existingPrefabPath); + editableRootObject = PrefabUtility.InstantiatePrefab(existingPrefab) as GameObject; + } + EditorUtility.DisplayProgressBar(DomainConstants.SystemName, $"Generating MA components...", 0); - AddMergeAnimatorComponent(rootObject, animatorController); - AddMenuInstallerComponent(rootObject, exMenu); - AddParameterComponent(rootObject, defaultModeIndex); + AddMergeAnimatorComponent(editableRootObject, animatorController); + AddMenuInstallerComponent(editableRootObject, exMenu); + AddParameterComponent(editableRootObject, defaultModeIndex); - AddBlinkDisablerComponent(rootObject); - AddTrackingControlDisablerComponent(rootObject); + AddBlinkDisablerComponent(editableRootObject); + AddTrackingControlDisablerComponent(editableRootObject); // Instantiate prefabs EditorUtility.DisplayProgressBar(DomainConstants.SystemName, $"Instantiating prefabs...", 0); - ModifyExistingSubPrefabs(rootObject); - InstantiatePrefabs(rootObject); + ModifyExistingSubPrefabs(editableRootObject); + InstantiatePrefabs(editableRootObject); // Update MA object prefab string rootObjectPrefabPath = AssetDatabase.GetAssetPath(_aV3Setting.MARootObjectPrefab); @@ -143,7 +151,11 @@ public void Generate(IMenu menu, bool forceOverLimitMode = false) rootObjectPrefabPath = folderPath + "/" + AV3Constants.MARootObjectName + ".prefab"; } - _aV3Setting.MARootObjectPrefab = PrefabUtility.SaveAsPrefabAssetAndConnect(rootObject, rootObjectPrefabPath, InteractionMode.AutomatedAction); + _aV3Setting.MARootObjectPrefab = PrefabUtility.SaveAsPrefabAssetAndConnect(editableRootObject, rootObjectPrefabPath, InteractionMode.AutomatedAction); + if (editableRootObject != rootObject) + { + UnityEngine.Object.DestroyImmediate(editableRootObject); + } // Replace sub-avatar's MA objects foreach (var subAvatar in _aV3Setting.SubTargetAvatars)