Skip to content

Commit 8de1a8f

Browse files
committed
Changed replacer logic to only restore base clips that are set in the instance
1 parent 63dabaf commit 8de1a8f

File tree

1 file changed

+47
-3
lines changed

1 file changed

+47
-3
lines changed

Runtime/Code/Player/Character/Animation/ClipReplacer/AnimatorClipReplacer.cs

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -207,21 +207,65 @@ public void RemoveClips(Object controller)
207207
return;
208208
}
209209

210+
if (overrideController == null)
211+
{
212+
Debug.LogError("No valid AnimatorOverrideController found.");
213+
return;
214+
}
215+
210216
if (originalOverrides == null || originalOverrides.Count == 0)
211217
{
212218
Debug.LogWarning("No original overrides found to restore.");
213219
return;
214220
}
215221

216-
// Restaura os overrides originais
217-
overrideController.ApplyOverrides(originalOverrides);
222+
if (clipReplacements == null || clipReplacements.Count == 0)
223+
{
224+
Debug.LogWarning("No clip replacements configured to restore.");
225+
return;
226+
}
227+
228+
// Get the current overrides from the AnimatorOverrideController
229+
var currentOverrides = new List<KeyValuePair<AnimationClip, AnimationClip>>(overrideController.overridesCount);
230+
overrideController.GetOverrides(currentOverrides);
231+
232+
// Create a new list to store the restored overrides
233+
var restoredOverrides = new List<KeyValuePair<AnimationClip, AnimationClip>>(currentOverrides);
234+
235+
// Restore only the clips configured in clipReplacements
236+
foreach (var replacement in clipReplacements)
237+
{
238+
var baseClipName = replacement.baseClipName;
239+
var originalOverride = originalOverrides.FirstOrDefault(o => o.Key.name == baseClipName);
240+
241+
if (originalOverride.Key != null)
242+
{
243+
// Replace the current clip with the original
244+
for (int i = 0; i < restoredOverrides.Count; i++)
245+
{
246+
if (restoredOverrides[i].Key.name == baseClipName)
247+
{
248+
restoredOverrides[i] = originalOverride;
249+
break;
250+
}
251+
}
252+
}
253+
else
254+
{
255+
Debug.LogWarning($"Original clip for {baseClipName} not found in saved overrides.");
256+
}
257+
}
258+
259+
// Apply the restored overrides to the AnimatorOverrideController
260+
overrideController.ApplyOverrides(restoredOverrides);
218261

219262
if (!Application.isPlaying)
220263
{
221-
Debug.Log("Original clips have been restored.");
264+
Debug.Log("Specified clips have been restored.");
222265
}
223266
}
224267

268+
225269
/// <summary>
226270
/// Attempts to extract an AnimatorOverrideController from the given object.
227271
/// </summary>

0 commit comments

Comments
 (0)