diff --git a/spine-csharp/src/AnimationState.cs b/spine-csharp/src/AnimationState.cs index 67c66a8d1..808373047 100644 --- a/spine-csharp/src/AnimationState.cs +++ b/spine-csharp/src/AnimationState.cs @@ -85,6 +85,25 @@ namespace Spine { public delegate void TrackEntryEventDelegate (TrackEntry trackEntry, Event e); public event TrackEntryEventDelegate Event; + + public void AssignEventSubscribersFrom (AnimationState src) { + Event = src.Event; + Start = src.Start; + Interrupt = src.Interrupt; + End = src.End; + Dispose = src.Dispose; + Complete = src.Complete; + } + + public void AddEventSubscribersFrom (AnimationState src) { + Event += src.Event; + Start += src.Start; + Interrupt += src.Interrupt; + End += src.End; + Dispose += src.Dispose; + Complete += src.Complete; + } + // end of difference private readonly EventQueue queue; // Initialized by constructor. private readonly HashSet propertyIDs = new HashSet(); diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineEditorUtilities.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineEditorUtilities.cs index 73f098cde..fe841c71c 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineEditorUtilities.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineEditorUtilities.cs @@ -219,7 +219,18 @@ namespace Spine.Unity.Editor { public static void ReinitializeComponent (SkeletonRenderer component) { if (component == null) return; if (!SkeletonDataAssetIsValid(component.SkeletonDataAsset)) return; - component.Initialize(true); + + var stateComponent = component as IAnimationStateComponent; + AnimationState oldAnimationState = null; + if (stateComponent != null) { + oldAnimationState = stateComponent.AnimationState; + } + + component.Initialize(true); // implicitly clears any subscribers + + if (oldAnimationState != null) { + stateComponent.AnimationState.AssignEventSubscribersFrom(oldAnimationState); + } #if BUILT_IN_SPRITE_MASK_COMPONENT SpineMaskUtilities.EditorAssignSpriteMaskMaterials(component);