From 156ef80a9cfa4752ed0c00ca37163edd9590c91d Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Fri, 8 Apr 2022 11:16:42 +0200 Subject: [PATCH] [unity] Setting SkeletonGraphic CanvasRenderer.cullTransparentMesh to false at new instances to avoid `Add` blend mode problems. --- .../Editor/Components/SkeletonGraphicInspector.cs | 9 +++++++++ .../spine-unity/Components/SkeletonGraphic.cs | 14 +++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonGraphicInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonGraphicInspector.cs index a14c6a711..e3f439147 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonGraphicInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonGraphicInspector.cs @@ -31,6 +31,10 @@ #define NEW_PREFAB_SYSTEM #endif +#if UNITY_2018_2_OR_NEWER +#define HAS_CULL_TRANSPARENT_MESH +#endif + using UnityEditor; using UnityEngine; @@ -469,6 +473,11 @@ namespace Spine.Unity.Editor { graphic.additiveMaterial = SkeletonGraphicInspector.DefaultSkeletonGraphicAdditiveMaterial; graphic.multiplyMaterial = SkeletonGraphicInspector.DefaultSkeletonGraphicMultiplyMaterial; graphic.screenMaterial = SkeletonGraphicInspector.DefaultSkeletonGraphicScreenMaterial; + +#if HAS_CULL_TRANSPARENT_MESH + var canvasRenderer = go.GetComponent(); + canvasRenderer.cullTransparentMesh = false; +#endif return go; } 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 df0134b98..efc4d95e4 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs @@ -169,13 +169,17 @@ namespace Spine.Unity { /// Add a SkeletonGraphic component to a GameObject. /// Material for the canvas renderer to use. Usually, the default SkeletonGraphic material will work. public static SkeletonGraphic AddSkeletonGraphicComponent (GameObject gameObject, SkeletonDataAsset skeletonDataAsset, Material material) { - var c = gameObject.AddComponent(); + var skeletonGraphic = gameObject.AddComponent(); if (skeletonDataAsset != null) { - c.material = material; - c.skeletonDataAsset = skeletonDataAsset; - c.Initialize(false); + skeletonGraphic.material = material; + skeletonGraphic.skeletonDataAsset = skeletonDataAsset; + skeletonGraphic.Initialize(false); } - return c; +#if HAS_CULL_TRANSPARENT_MESH + var canvasRenderer = gameObject.GetComponent(); + if (canvasRenderer) canvasRenderer.cullTransparentMesh = false; +#endif + return skeletonGraphic; } #endregion