diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs index 876709338..f176fc30d 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs @@ -117,6 +117,14 @@ namespace Spine.Unity { [System.Serializable] public class SpriteMaskInteractionMaterials { + public bool AnyMaterialCreated { + get { + return materialsMaskDisabled.Length > 0 || + materialsInsideMask.Length > 0 || + materialsOutsideMask.Length > 0; + } + } + /// Material references for switching material sets at runtime when changes to . public Material[] materialsMaskDisabled = new Material[0]; /// Material references for switching material sets at runtime when changes to . @@ -417,12 +425,16 @@ namespace Spine.Unity { rendererBuffers.UpdateSharedMaterials(workingSubmeshInstructions); + bool materialsChanged = rendererBuffers.MaterialsChangedInLastUpdate(); if (updateTriangles) { // Check if the triangles should also be updated. meshGenerator.FillTriangles(currentMesh); meshRenderer.sharedMaterials = rendererBuffers.GetUpdatedSharedMaterialsArray(); - } else if (rendererBuffers.MaterialsChangedInLastUpdate()) { + } else if (materialsChanged) { meshRenderer.sharedMaterials = rendererBuffers.GetUpdatedSharedMaterialsArray(); } + if (materialsChanged && (this.maskMaterials.AnyMaterialCreated)) { + this.maskMaterials = new SpriteMaskInteractionMaterials(); + } meshGenerator.FillLateVertexData(currentMesh); @@ -512,6 +524,11 @@ namespace Spine.Unity { } #endif + if (Application.isPlaying) { + if (maskInteraction != SpriteMaskInteraction.None && maskMaterials.materialsMaskDisabled.Length == 0) + maskMaterials.materialsMaskDisabled = meshRenderer.sharedMaterials; + } + if (maskMaterials.materialsMaskDisabled.Length > 0 && maskMaterials.materialsMaskDisabled[0] != null && maskInteraction == SpriteMaskInteraction.None) { this.meshRenderer.materials = maskMaterials.materialsMaskDisabled;