@@ -8,8 +8,9 @@ namespace Code.Player.Character
88{
99 [ ExecuteInEditMode ]
1010 [ LuauAPI ]
11- public class AnimatorClipReplacer : MonoBehaviour
12- {
11+ public class AnimatorClipReplacer : MonoBehaviour {
12+ private static Dictionary < Animator , AnimatorOverrideController > _overrideControllers = new ( ) ;
13+
1314 /// <summary>
1415 /// Holds a reference to the animator-related object, which can be an <see cref="Animator"/>,
1516 /// <see cref="GameObject"/>, or <see cref="AnimatorOverrideController"/>.
@@ -73,7 +74,10 @@ public void ReplaceClips(Object controller)
7374 }
7475 }
7576
76-
77+ [ RuntimeInitializeOnLoadMethod ( RuntimeInitializeLoadType . SubsystemRegistration ) ]
78+ public static void ResetOnLoad ( ) {
79+ _overrideControllers . Clear ( ) ;
80+ }
7781
7882 /// <summary>
7983 /// Overload that directly applies clip replacements to the given <see cref="AnimatorOverrideController"/>.
@@ -141,6 +145,7 @@ private void ReplaceClipsInternal(AnimatorOverrideController overrideController)
141145 var originalClip = overrides [ i ] . Key ;
142146 if ( animationMap . TryGetValue ( originalClip . name , out var newClip ) )
143147 {
148+ Debug . Log ( "Replacing " + originalClip . name + " in favor of " + newClip . name ) ;
144149 if ( newClip != null )
145150 {
146151 newOverrides [ i ] = new KeyValuePair < AnimationClip , AnimationClip > ( originalClip , newClip ) ;
@@ -273,8 +278,12 @@ private bool TryGetOverrideController(Object controller, out AnimatorOverrideCon
273278 {
274279 overrideController = null ;
275280
276- if ( controller is Animator animator )
277- {
281+ if ( controller is Animator animator ) {
282+ if ( _overrideControllers . TryGetValue ( animator , out var oc ) ) {
283+ overrideController = oc ;
284+ return true ;
285+ }
286+
278287 overrideController = animator . runtimeAnimatorController as AnimatorOverrideController ;
279288
280289 if ( Application . isPlaying )
@@ -283,9 +292,10 @@ private bool TryGetOverrideController(Object controller, out AnimatorOverrideCon
283292 AnimatorOverrideController instanaceAnimator = new ( animator . runtimeAnimatorController ) ;
284293 var overrides = new List < KeyValuePair < AnimationClip , AnimationClip > > ( overrideController . overridesCount ) ;
285294 overrideController . GetOverrides ( overrides ) ;
286-
295+
287296 instanaceAnimator . ApplyOverrides ( overrides ) ;
288297 animator . runtimeAnimatorController = instanaceAnimator ;
298+ _overrideControllers [ animator ] = instanaceAnimator ;
289299
290300 overrideController = animator . runtimeAnimatorController as AnimatorOverrideController ;
291301 }
0 commit comments