[unity] Setting SkeletonGraphic CanvasRenderer.cullTransparentMesh to false at new instances to avoid Add blend mode problems.

This commit is contained in:
Harald Csaszar 2022-04-08 11:16:42 +02:00
parent 754365ef9b
commit 156ef80a9c
2 changed files with 18 additions and 5 deletions

View File

@ -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>();
canvasRenderer.cullTransparentMesh = false;
#endif
return go;
}

View File

@ -169,13 +169,17 @@ namespace Spine.Unity {
/// <summary>Add a SkeletonGraphic component to a GameObject.</summary>
/// <param name="material">Material for the canvas renderer to use. Usually, the default SkeletonGraphic material will work.</param>
public static SkeletonGraphic AddSkeletonGraphicComponent (GameObject gameObject, SkeletonDataAsset skeletonDataAsset, Material material) {
var c = gameObject.AddComponent<SkeletonGraphic>();
var skeletonGraphic = gameObject.AddComponent<SkeletonGraphic>();
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<CanvasRenderer>();
if (canvasRenderer) canvasRenderer.cullTransparentMesh = false;
#endif
return skeletonGraphic;
}
#endregion