[unity] Fix SkeletonSubmeshGraphic issue with multiple IMaterialModifier components. Closes #2966.

This commit is contained in:
Harald Csaszar 2025-12-04 22:05:22 +01:00
parent a554d4f1b0
commit 51a9e34f23
3 changed files with 28 additions and 3 deletions

View File

@ -27,7 +27,15 @@
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * 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; using UnityEngine;
#if HAS_LIST_POOL
using UnityEngine.Pool;
#endif
using UnityEngine.UI; using UnityEngine.UI;
namespace Spine.Unity { namespace Spine.Unity {
@ -53,5 +61,22 @@ namespace Spine.Unity {
base.OnEnable(); base.OnEnable();
this.canvasRenderer.cull = false; this.canvasRenderer.cull = false;
} }
#if HAS_LIST_POOL
public Material UpdateModifiedMaterial (Material baseMaterial) {
List<IMaterialModifier> modifierComponents = ListPool<IMaterialModifier>.Get();
GetComponents<IMaterialModifier>(modifierComponents);
Material currentMaterial = baseMaterial;
for (int i = 0; i < modifierComponents.Count; i++)
currentMaterial = modifierComponents[i].GetModifiedMaterial(currentMaterial);
ListPool<IMaterialModifier>.Release(modifierComponents);
return currentMaterial;
}
#else
public Material UpdateModifiedMaterial (Material baseMaterial) {
return GetModifiedMaterial(baseMaterial);
}
#endif
} }
} }

View File

@ -1024,7 +1024,7 @@ namespace Spine.Unity {
usedMaterial = multiplyMaterial; usedMaterial = multiplyMaterial;
else if (blendMode == BlendMode.Screen && screenMaterial) else if (blendMode == BlendMode.Screen && screenMaterial)
usedMaterial = screenMaterial; usedMaterial = screenMaterial;
usedMaterialItems[i] = submeshGraphics[i].GetModifiedMaterial(usedMaterial); usedMaterialItems[i] = submeshGraphics[i].UpdateModifiedMaterial(usedMaterial);
} }
} else { } else {
Texture originalTexture = submeshMaterial.mainTexture; Texture originalTexture = submeshMaterial.mainTexture;
@ -1035,7 +1035,7 @@ namespace Spine.Unity {
if (!customTextureOverride.TryGetValue(originalTexture, out usedTexture)) if (!customTextureOverride.TryGetValue(originalTexture, out usedTexture))
usedTexture = originalTexture; usedTexture = originalTexture;
usedMaterialItems[i] = submeshGraphics[i].GetModifiedMaterial(usedMaterial); usedMaterialItems[i] = submeshGraphics[i].UpdateModifiedMaterial(usedMaterial);
usedTextureItems[i] = usedTexture; usedTextureItems[i] = usedTexture;
} }
} }

View File

@ -2,7 +2,7 @@
"name": "com.esotericsoftware.spine.spine-unity", "name": "com.esotericsoftware.spine.spine-unity",
"displayName": "spine-unity Runtime", "displayName": "spine-unity Runtime",
"description": "This plugin provides the spine-unity runtime core.", "description": "This plugin provides the spine-unity runtime core.",
"version": "4.2.110", "version": "4.2.111",
"unity": "2018.3", "unity": "2018.3",
"author": { "author": {
"name": "Esoteric Software", "name": "Esoteric Software",