From e103d4494fe57c59bb42e0f34c5750d15e104d19 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Wed, 13 Aug 2025 20:47:07 +0200 Subject: [PATCH] [unity] Keep manually placed AnimationClip Events when updating skeleton assets (Mecanim) even when string param used. See #1838. --- .../Editor/spine-unity/Editor/Windows/SkeletonBaker.cs | 9 ++++++++- spine-unity/Assets/Spine/package.json | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SkeletonBaker.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SkeletonBaker.cs index db9471fa8..d183a38db 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SkeletonBaker.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Windows/SkeletonBaker.cs @@ -69,6 +69,10 @@ namespace Spine.Unity.Editor { public static class SkeletonBaker { const string SpineEventStringId = "SpineEvent"; + public static UnityEngine.Object SpineEventObjectPlaceholder { + get { return SpineEditorUtilities.Icons.skeletonDataAssetIcon; } + } + const float EventTimeEqualityEpsilon = 0.01f; #region SkeletonMecanim's Mecanim Clips @@ -1531,6 +1535,8 @@ namespace Spine.Unity.Editor { if (!string.IsNullOrEmpty(spineEvent.String)) { unityAnimationEvent.stringParameter = spineEvent.String; + // if string (separate from name) is set in event, fallback to objectReferenceParameter. + unityAnimationEvent.objectReferenceParameter = SpineEventObjectPlaceholder; } else if (spineEvent.Int != 0) { unityAnimationEvent.intParameter = spineEvent.Int; } else if (spineEvent.Float != 0) { @@ -1543,7 +1549,8 @@ namespace Spine.Unity.Editor { static void AddPreviousUserEvents (ref List allEvents, AnimationEvent[] previousEvents) { foreach (AnimationEvent previousEvent in previousEvents) { - if (previousEvent.stringParameter == SpineEventStringId) + if (previousEvent.stringParameter == SpineEventStringId || + previousEvent.objectReferenceParameter == SpineEventObjectPlaceholder) continue; AnimationEvent identicalEvent = allEvents.Find(newEvent => { return newEvent.functionName == previousEvent.functionName && diff --git a/spine-unity/Assets/Spine/package.json b/spine-unity/Assets/Spine/package.json index e086cf8fb..b903fcbd0 100644 --- a/spine-unity/Assets/Spine/package.json +++ b/spine-unity/Assets/Spine/package.json @@ -2,7 +2,7 @@ "name": "com.esotericsoftware.spine.spine-unity", "displayName": "spine-unity Runtime", "description": "This plugin provides the spine-unity runtime core.", - "version": "4.2.107", + "version": "4.2.108", "unity": "2018.3", "author": { "name": "Esoteric Software",