From 51a9e34f230b5d18bba68d64d0d0433a1465d65c Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Thu, 4 Dec 2025 22:05:22 +0100 Subject: [PATCH] [unity] Fix SkeletonSubmeshGraphic issue with multiple IMaterialModifier components. Closes #2966. --- .../Internal/SkeletonSubmeshGraphic.cs | 25 +++++++++++++++++++ .../spine-unity/Components/SkeletonGraphic.cs | 4 +-- spine-unity/Assets/Spine/package.json | 2 +- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Internal/SkeletonSubmeshGraphic.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Internal/SkeletonSubmeshGraphic.cs index 5159bb882..3f315175b 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Internal/SkeletonSubmeshGraphic.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/Internal/SkeletonSubmeshGraphic.cs @@ -27,7 +27,15 @@ * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ +#if UNITY_2021_1_OR_NEWER +#define HAS_LIST_POOL +#endif + +using System.Collections.Generic; using UnityEngine; +#if HAS_LIST_POOL +using UnityEngine.Pool; +#endif using UnityEngine.UI; namespace Spine.Unity { @@ -53,5 +61,22 @@ namespace Spine.Unity { base.OnEnable(); this.canvasRenderer.cull = false; } + +#if HAS_LIST_POOL + public Material UpdateModifiedMaterial (Material baseMaterial) { + List modifierComponents = ListPool.Get(); + GetComponents(modifierComponents); + + Material currentMaterial = baseMaterial; + for (int i = 0; i < modifierComponents.Count; i++) + currentMaterial = modifierComponents[i].GetModifiedMaterial(currentMaterial); + ListPool.Release(modifierComponents); + return currentMaterial; + } +#else + public Material UpdateModifiedMaterial (Material baseMaterial) { + return GetModifiedMaterial(baseMaterial); + } +#endif } } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs index a04f06743..75e873d52 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs @@ -1024,7 +1024,7 @@ namespace Spine.Unity { usedMaterial = multiplyMaterial; else if (blendMode == BlendMode.Screen && screenMaterial) usedMaterial = screenMaterial; - usedMaterialItems[i] = submeshGraphics[i].GetModifiedMaterial(usedMaterial); + usedMaterialItems[i] = submeshGraphics[i].UpdateModifiedMaterial(usedMaterial); } } else { Texture originalTexture = submeshMaterial.mainTexture; @@ -1035,7 +1035,7 @@ namespace Spine.Unity { if (!customTextureOverride.TryGetValue(originalTexture, out usedTexture)) usedTexture = originalTexture; - usedMaterialItems[i] = submeshGraphics[i].GetModifiedMaterial(usedMaterial); + usedMaterialItems[i] = submeshGraphics[i].UpdateModifiedMaterial(usedMaterial); usedTextureItems[i] = usedTexture; } } diff --git a/spine-unity/Assets/Spine/package.json b/spine-unity/Assets/Spine/package.json index 7313f0f20..ff489c119 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.110", + "version": "4.2.111", "unity": "2018.3", "author": { "name": "Esoteric Software",