diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonRendererInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonRendererInspector.cs index f777addc4..66ae5331a 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonRendererInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonRendererInspector.cs @@ -34,6 +34,10 @@ #define NO_PREFAB_MESH #endif +#if UNITY_2017_OR_NEWER +#define BUILT_IN_SPRITE_MASK_COMPONENT +#endif + using UnityEditor; using System.Collections.Generic; using UnityEngine; @@ -215,6 +219,7 @@ namespace Spine.Unity.Editor { } } + #if BUILT_IN_SPRITE_MASK_COMPONENT if (setMaskNoneMaterialsQueued) { setMaskNoneMaterialsQueued = false; foreach (var c in targets) @@ -241,8 +246,9 @@ namespace Spine.Unity.Editor { foreach (var c in targets) EditorDeleteMaskMaterials(c as SkeletonRenderer, SpriteMaskInteraction.VisibleOutsideMask); } + #endif - #if NO_PREFAB_MESH +#if NO_PREFAB_MESH if (isInspectingPrefab) { if (multi) { foreach (var c in targets) { @@ -258,7 +264,7 @@ namespace Spine.Unity.Editor { meshFilter.sharedMesh = null; } } - #endif +#endif } bool valid = TargetIsValid; @@ -362,6 +368,7 @@ namespace Spine.Unity.Editor { if (tangents != null) EditorGUILayout.PropertyField(tangents, TangentsLabel); } + #if BUILT_IN_SPRITE_MASK_COMPONENT EditorGUILayout.Space(); if (maskMaterialsNone.arraySize > 0 || maskMaterialsInside.arraySize > 0 || maskMaterialsOutside.arraySize > 0) { EditorGUILayout.LabelField(SpineInspectorUtility.TempContent("Mask Interaction Materials", SpineInspectorUtility.UnityIcon()), EditorStyles.boldLabel); @@ -376,6 +383,7 @@ namespace Spine.Unity.Editor { MaskMaterialsEditingField(ref setOutsideMaskMaterialsQueued, ref deleteOutsideMaskMaterialsQueued, maskMaterialsOutside, MaskMaterialsOutsideLabel, differentMaskModesSelected, allowDelete : true, isActiveMaterial: activeMaskInteractionValue == (int)SpriteMaskInteraction.VisibleOutsideMask); } + #endif EditorGUILayout.Space(); @@ -525,11 +533,20 @@ namespace Spine.Unity.Editor { if (component == null) return; if (!SkeletonDataAssetIsValid(component.SkeletonDataAsset)) return; component.Initialize(true); + + #if BUILT_IN_SPRITE_MASK_COMPONENT SpineMaskUtilities.EditorAssignSpriteMaskMaterials(component); + #endif + component.LateUpdate(); } + static bool SkeletonDataAssetIsValid (SkeletonDataAsset asset) { + return asset != null && asset.GetSkeletonData(quiet: true) != null; + } + bool AreAnyMaskMaterialsMissing() { + #if BUILT_IN_SPRITE_MASK_COMPONENT foreach (var o in targets) { var component = (SkeletonRenderer)o; if (!component.valid) @@ -537,13 +554,11 @@ namespace Spine.Unity.Editor { if (SpineMaskUtilities.AreMaskMaterialsMissing(component)) return true; } + #endif return false; } - static bool SkeletonDataAssetIsValid (SkeletonDataAsset asset) { - return asset != null && asset.GetSkeletonData(quiet: true) != null; - } - + #if BUILT_IN_SPRITE_MASK_COMPONENT static void EditorSetMaskMaterials(SkeletonRenderer component, SpriteMaskInteraction maskType) { if (component == null) return; @@ -556,5 +571,6 @@ namespace Spine.Unity.Editor { if (!SkeletonDataAssetIsValid(component.SkeletonDataAsset)) return; SpineMaskUtilities.EditorDeleteMaskMaterials(component.maskMaterials, maskType); } + #endif } } diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineMaskUtilities.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineMaskUtilities.cs index 9781bb0cc..4b1e3e8cc 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineMaskUtilities.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SpineMaskUtilities.cs @@ -44,6 +44,12 @@ #define NEWHIERARCHYWINDOWCALLBACKS #endif +#if UNITY_2017_OR_NEWER +#define BUILT_IN_SPRITE_MASK_COMPONENT +#endif + +#if BUILT_IN_SPRITE_MASK_COMPONENT + using UnityEngine; using UnityEditor; using System.Collections.Generic; @@ -241,3 +247,4 @@ namespace Spine.Unity.Editor { } } } +#endif // BUILT_IN_SPRITE_MASK_COMPONENT 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 a57bab908..85108f899 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs @@ -31,6 +31,11 @@ #if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER #define NEW_PREFAB_SYSTEM #endif + +#if UNITY_2017_OR_NEWER +#define BUILT_IN_SPRITE_MASK_COMPONENT +#endif + #define SPINE_OPTIONAL_RENDEROVERRIDE #define SPINE_OPTIONAL_MATERIALOVERRIDE @@ -92,6 +97,7 @@ namespace Spine.Unity { /// If true, tangents are calculated every frame and added to the Mesh. Enable this when using a shader that uses lighting that requires tangents. public bool calculateTangents = false; + #if BUILT_IN_SPRITE_MASK_COMPONENT /// This enum controls the mode under which the sprite will interact with the masking system. /// Interaction modes with components are identical to Unity's , /// see https://docs.unity3d.com/ScriptReference/SpriteMaskInteraction.html. @@ -117,6 +123,7 @@ namespace Spine.Unity { public const UnityEngine.Rendering.CompareFunction STENCIL_COMP_MASKINTERACTION_VISIBLE_INSIDE = UnityEngine.Rendering.CompareFunction.LessEqual; /// Shader property value used as Stencil comparison function for . public const UnityEngine.Rendering.CompareFunction STENCIL_COMP_MASKINTERACTION_VISIBLE_OUTSIDE = UnityEngine.Rendering.CompareFunction.Greater; + #endif // #if BUILT_IN_SPRITE_MASK_COMPONENT #endregion #region Overrides @@ -400,9 +407,11 @@ namespace Spine.Unity { meshFilter.sharedMesh = currentMesh; currentSmartMesh.instructionUsed.Set(currentInstructions); + #if BUILT_IN_SPRITE_MASK_COMPONENT if (meshRenderer != null) { AssignSpriteMaskMaterials(); } + #endif } public void FindAndApplySeparatorSlots (string startsWith, bool clearExistingSeparators = true, bool updateStringArray = false) { @@ -465,6 +474,7 @@ namespace Spine.Unity { } } + #if BUILT_IN_SPRITE_MASK_COMPONENT private void AssignSpriteMaskMaterials() { if (maskMaterials.materialsMaskDisabled.Length > 0 && maskMaterials.materialsMaskDisabled[0] != null && @@ -514,5 +524,6 @@ namespace Spine.Unity { } return true; } + #endif //#if BUILT_IN_SPRITE_MASK_COMPONENT } }