diff --git a/spine-cpp/spine-cpp/src/spine/SkeletonBounds.cpp b/spine-cpp/spine-cpp/src/spine/SkeletonBounds.cpp index 768868f6f..3df73dbc9 100644 --- a/spine-cpp/spine-cpp/src/spine/SkeletonBounds.cpp +++ b/spine-cpp/spine-cpp/src/spine/SkeletonBounds.cpp @@ -198,10 +198,10 @@ float SkeletonBounds::getHeight() { } void SkeletonBounds::aabbCompute() { - float minX = FLT_MIN; - float minY = FLT_MIN; - float maxX = FLT_MAX; - float maxY = FLT_MAX; + float minX = FLT_MAX; + float minY = FLT_MAX; + float maxX = FLT_MIN; + float maxY = FLT_MIN; for (size_t i = 0, n = _polygons.size(); i < n; ++i) { spine::Polygon *polygon = _polygons[i]; diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/BoneLocalOverride.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/BoneLocalOverride.cs index b8f75e785..199b1b0b5 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/BoneLocalOverride.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/BoneLocalOverride.cs @@ -53,8 +53,8 @@ namespace Spine.Unity.Examples { #if UNITY_EDITOR void OnValidate () { if (Application.isPlaying) return; - spineComponent = spineComponent ?? GetComponent(); - if (spineComponent == null) return; + if (spineComponent == null) spineComponent = GetComponent(); + if (spineComponent.IsNullOrDestroyed()) return; if (bone != null) bone.SetToSetupPose(); OverrideLocal(spineComponent); } diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonRagdoll2D.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonRagdoll2D.cs index 84d7f945e..6cf776832 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonRagdoll2D.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SkeletonUtility Modules/SkeletonRagdoll2D.cs @@ -29,7 +29,7 @@ // Contributed by: Mitch Thompson -#if UNITY_2019_2_OR_NEWER +#if UNITY_2019_2 || UNITY_2019_3 || UNITY_2019_4 || UNITY_2020_1 || UNITY_2020_2 // note: 2020.3+ uses old bahavior again #define HINGE_JOINT_NEW_BEHAVIOUR #endif @@ -42,7 +42,7 @@ namespace Spine.Unity.Examples { public class SkeletonRagdoll2D : MonoBehaviour { static Transform parentSpaceHelper; - #region Inspector +#region Inspector [Header("Hierarchy")] [SpineBone] public string startingBoneName = ""; @@ -72,7 +72,7 @@ namespace Spine.Unity.Examples { [Range(0, 1)] public float mix = 1; public bool oldRagdollBehaviour = false; - #endregion +#endregion ISkeletonAnimation targetSkeletonComponent; Skeleton skeleton; @@ -110,7 +110,7 @@ namespace Spine.Unity.Examples { } } - #region API +#region API public Rigidbody2D[] RigidbodyArray { get { if (!isActive) @@ -299,7 +299,7 @@ namespace Spine.Unity.Examples { var bone = skeleton.FindBone(boneName); return (bone != null && boneTable.ContainsKey(bone)) ? boneTable[bone].GetComponent() : null; } - #endregion +#endregion /// Generates the ragdoll simulation's Transform and joint setup. void RecursivelyCreateBoneProxies (Bone b) { diff --git a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SpineEventUnityHandler.cs b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SpineEventUnityHandler.cs index a0b92ef26..a3bed5c0b 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SpineEventUnityHandler.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/Sample Components/SpineEventUnityHandler.cs @@ -48,9 +48,11 @@ namespace Spine.Unity.Prototyping { IAnimationStateComponent animationStateComponent; void Start () { - skeletonComponent = skeletonComponent ?? GetComponent(); + if (skeletonComponent == null) + skeletonComponent = GetComponent(); if (skeletonComponent == null) return; - animationStateComponent = animationStateComponent ?? skeletonComponent as IAnimationStateComponent; + if (animationStateComponent == null) + animationStateComponent = skeletonComponent as IAnimationStateComponent; if (animationStateComponent == null) return; var skeleton = skeletonComponent.Skeleton; if (skeleton == null) return; @@ -66,8 +68,8 @@ namespace Spine.Unity.Prototyping { } void OnDestroy () { - animationStateComponent = animationStateComponent ?? GetComponent(); - if (animationStateComponent == null) return; + if (animationStateComponent == null) animationStateComponent = GetComponent(); + if (animationStateComponent.IsNullOrDestroyed()) return; var state = animationStateComponent.AnimationState; foreach (var ep in events) { diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/ISkeletonAnimation.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/ISkeletonAnimation.cs index a6b5f7f3f..7f21b546d 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/ISkeletonAnimation.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/ISkeletonAnimation.cs @@ -39,8 +39,16 @@ namespace Spine.Unity { public delegate void UpdateBonesDelegate (ISkeletonAnimation animated); + public interface ISpineComponent { } + public static class ISpineComponentExtensions { + public static bool IsNullOrDestroyed (this ISpineComponent component) { + if (component == null) return true; + return (UnityEngine.Object)component == null; + } + } + /// A Spine-Unity Component that animates a Skeleton but not necessarily with a Spine.AnimationState. - public interface ISkeletonAnimation { + public interface ISkeletonAnimation : ISpineComponent { event UpdateBonesDelegate UpdateLocal; event UpdateBonesDelegate UpdateWorld; event UpdateBonesDelegate UpdateComplete; @@ -48,13 +56,13 @@ namespace Spine.Unity { } /// Holds a reference to a SkeletonDataAsset. - public interface IHasSkeletonDataAsset { + public interface IHasSkeletonDataAsset : ISpineComponent { /// Gets the SkeletonDataAsset of the Spine Component. SkeletonDataAsset SkeletonDataAsset { get; } } /// A Spine-Unity Component that manages a Spine.Skeleton instance, instantiated from a SkeletonDataAsset. - public interface ISkeletonComponent { + public interface ISkeletonComponent : ISpineComponent { /// Gets the SkeletonDataAsset of the Spine Component. //[System.Obsolete] SkeletonDataAsset SkeletonDataAsset { get; } @@ -64,18 +72,18 @@ namespace Spine.Unity { } /// A Spine-Unity Component that uses a Spine.AnimationState to animate its skeleton. - public interface IAnimationStateComponent { + public interface IAnimationStateComponent : ISpineComponent { /// Gets the Spine.AnimationState of the animated Spine Component. This is equivalent to SkeletonAnimation.state. AnimationState AnimationState { get; } } /// A Spine-Unity Component that holds a reference to a SkeletonRenderer. - public interface IHasSkeletonRenderer { + public interface IHasSkeletonRenderer : ISpineComponent { SkeletonRenderer SkeletonRenderer { get; } } /// A Spine-Unity Component that holds a reference to an ISkeletonComponent. - public interface IHasSkeletonComponent { + public interface IHasSkeletonComponent : ISpineComponent { ISkeletonComponent SkeletonComponent { get; } } } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesPixelLit.shader b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesPixelLit.shader index b50dd042d..7296a95ae 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesPixelLit.shader +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesPixelLit.shader @@ -99,7 +99,6 @@ Shader "Spine/Sprite/Pixel Lit" #pragma fragmentoption ARB_precision_hint_fastest #pragma multi_compile_fog #pragma multi_compile _ PIXELSNAP_ON - #pragma multi_compile _ ETC1_EXTERNAL_ALPHA #pragma vertex vert #pragma fragment fragBase @@ -134,7 +133,6 @@ Shader "Spine/Sprite/Pixel Lit" #pragma fragmentoption ARB_precision_hint_fastest #pragma multi_compile_fog #pragma multi_compile _ PIXELSNAP_ON - #pragma multi_compile _ ETC1_EXTERNAL_ALPHA #pragma vertex vert #pragma fragment fragAdd @@ -158,7 +156,6 @@ Shader "Spine/Sprite/Pixel Lit" #pragma fragmentoption ARB_precision_hint_fastest #pragma multi_compile_shadowcaster #pragma multi_compile _ PIXELSNAP_ON - #pragma multi_compile _ ETC1_EXTERNAL_ALPHA #pragma vertex vert #pragma fragment frag diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesUnlit.shader b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesUnlit.shader index 03753c748..db66ae6b2 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesUnlit.shader +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesUnlit.shader @@ -69,7 +69,6 @@ Shader "Spine/Sprite/Unlit" #pragma fragmentoption ARB_precision_hint_fastest #pragma multi_compile_fog #pragma multi_compile _ PIXELSNAP_ON - #pragma multi_compile _ ETC1_EXTERNAL_ALPHA #pragma vertex vert #pragma fragment frag @@ -93,7 +92,6 @@ Shader "Spine/Sprite/Unlit" #pragma fragmentoption ARB_precision_hint_fastest #pragma multi_compile_shadowcaster #pragma multi_compile _ PIXELSNAP_ON - #pragma multi_compile _ ETC1_EXTERNAL_ALPHA #pragma vertex vert #pragma fragment frag diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesVertexLit.shader b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesVertexLit.shader index 10d945dbf..e46869393 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesVertexLit.shader +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesVertexLit.shader @@ -99,7 +99,6 @@ Shader "Spine/Sprite/Vertex Lit" #pragma fragmentoption ARB_precision_hint_fastest #pragma multi_compile_fog #pragma multi_compile _ PIXELSNAP_ON - #pragma multi_compile _ ETC1_EXTERNAL_ALPHA #pragma vertex vert #pragma fragment frag @@ -123,7 +122,6 @@ Shader "Spine/Sprite/Vertex Lit" #pragma fragmentoption ARB_precision_hint_fastest #pragma multi_compile_shadowcaster #pragma multi_compile _ PIXELSNAP_ON - #pragma multi_compile _ ETC1_EXTERNAL_ALPHA #pragma vertex vert #pragma fragment frag diff --git a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateMixerBehaviour.cs b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateMixerBehaviour.cs index 0bfae9f15..0d97a9ee8 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateMixerBehaviour.cs +++ b/spine-unity/Modules/com.esotericsoftware.spine.timeline/Runtime/SpineAnimationState/SpineAnimationStateMixerBehaviour.cs @@ -75,7 +75,7 @@ namespace Spine.Unity.Playables { } protected void HandlePause (Playable playable) { - if (animationStateComponent == null) return; + if (animationStateComponent.IsNullOrDestroyed()) return; TrackEntry current = animationStateComponent.AnimationState.GetCurrent(trackIndex); if (current != null && current == timelineStartedTrackEntry) { @@ -86,7 +86,7 @@ namespace Spine.Unity.Playables { } protected void HandleResume (Playable playable) { - if (animationStateComponent == null) return; + if (animationStateComponent.IsNullOrDestroyed()) return; TrackEntry current = animationStateComponent.AnimationState.GetCurrent(trackIndex); if (current != null && current == pausedTrackEntry) { @@ -95,7 +95,7 @@ namespace Spine.Unity.Playables { } protected void HandleClipEnd () { - if (animationStateComponent == null) return; + if (animationStateComponent.IsNullOrDestroyed()) return; var state = animationStateComponent.AnimationState; if (endAtClipEnd && @@ -116,7 +116,7 @@ namespace Spine.Unity.Playables { var skeletonGraphic = playerData as SkeletonGraphic; animationStateComponent = playerData as IAnimationStateComponent; var skeletonComponent = playerData as ISkeletonComponent; - if (animationStateComponent == null || skeletonComponent == null) return; + if (animationStateComponent.IsNullOrDestroyed() || skeletonComponent == null) return; var skeleton = skeletonComponent.Skeleton; var state = animationStateComponent.AnimationState; @@ -226,7 +226,7 @@ namespace Spine.Unity.Playables { SkeletonAnimation skeletonAnimation, SkeletonGraphic skeletonGraphic) { if (Application.isPlaying) return; - if (skeletonComponent == null || animationStateComponent == null) return; + if (animationStateComponent.IsNullOrDestroyed() || skeletonComponent == null) return; int inputCount = playable.GetInputCount(); int lastNonZeroWeightTrack = -1; diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-SkeletonLit-URP-2D.shader b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-SkeletonLit-URP-2D.shader index ed25846aa..bb2dd7f28 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-SkeletonLit-URP-2D.shader +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-SkeletonLit-URP-2D.shader @@ -112,7 +112,18 @@ return main; #endif half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, i.uv); + #if UNITY_VERSION < 202120 return half4(CombinedShapeLightShared(half4(main.rgb, 1), mask, i.lightingUV).rgb, main.a); + #else + SurfaceData2D surfaceData; + InputData2D inputData; + surfaceData.albedo = main.rgb; + surfaceData.alpha = 1; + surfaceData.mask = mask; + inputData.uv = i.uv; + inputData.lightingUV = i.lightingUV; + return half4(CombinedShapeLightShared(surfaceData, inputData).rgb, main.a); + #endif } ENDHLSL diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-Sprite-URP-2D.shader b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-Sprite-URP-2D.shader index fc3b5fb3f..7a50d3622 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-Sprite-URP-2D.shader +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-Sprite-URP-2D.shader @@ -88,7 +88,6 @@ Shader "Universal Render Pipeline/2D/Spine/Sprite" #pragma fragmentoption ARB_precision_hint_fastest #pragma multi_compile _ PIXELSNAP_ON - #pragma multi_compile _ ETC1_EXTERNAL_ALPHA //-------------------------------------- // GPU Instancing @@ -132,7 +131,6 @@ Shader "Universal Render Pipeline/2D/Spine/Sprite" #pragma shader_feature _ALPHA_CLIP #pragma multi_compile _ PIXELSNAP_ON - #pragma multi_compile _ ETC1_EXTERNAL_ALPHA //-------------------------------------- // GPU Instancing diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/ShaderShared.cginc b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/ShaderShared.cginc index 521692bcd..e94b46986 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/ShaderShared.cginc +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/ShaderShared.cginc @@ -1,2 +1,3 @@ // Adapt this path accordingly if you have unpacked the Spine directory to another location. -#include "Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/ShaderShared.cginc" \ No newline at end of file +#include "Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/ShaderShared.cginc" +//#include "Packages/com.esotericsoftware.spine.spine-unity/Runtime/spine-unity/Shaders/Sprite/CGIncludes/ShaderShared.cginc" diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/Spine-Common.cginc b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/Spine-Common.cginc index 13fbfa1dc..2469ca8b1 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/Spine-Common.cginc +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/Spine-Common.cginc @@ -1,2 +1,3 @@ // Adapt this path accordingly if you have unpacked the Spine directory to another location. #include "Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-Common.cginc" +//#include "Packages/com.esotericsoftware.spine.spine-unity/Runtime/spine-unity/Shaders/CGIncludes/Spine-Common.cginc" diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/Spine-Outline-Common.cginc b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/Spine-Outline-Common.cginc index e0d1159e1..147f46519 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/Spine-Outline-Common.cginc +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/Spine-Outline-Common.cginc @@ -1,2 +1,3 @@ // Adapt this path accordingly if you have unpacked the Spine directory to another location. #include "Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-Outline-Common.cginc" +//#include "Packages/com.esotericsoftware.spine.spine-unity/Runtime/spine-unity/Shaders/CGIncludes/Spine-Outline-Common.cginc" diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/SpriteLighting.cginc b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/SpriteLighting.cginc index addf71be1..6dc16e608 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/SpriteLighting.cginc +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/SpineCoreShaders/SpriteLighting.cginc @@ -1,2 +1,3 @@ // Adapt this path accordingly if you have unpacked the Spine directory to another location. -#include "Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteLighting.cginc" \ No newline at end of file +#include "Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteLighting.cginc" +//#include "Packages/com.esotericsoftware.spine.spine-unity/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteLighting.cginc" diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Sprite-URP.shader b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Sprite-URP.shader index 2092e515d..6b72b7f20 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Sprite-URP.shader +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Sprite-URP.shader @@ -99,14 +99,10 @@ Shader "Universal Render Pipeline/Spine/Sprite" #pragma fragmentoption ARB_precision_hint_fastest #pragma multi_compile_fog #pragma multi_compile _ PIXELSNAP_ON - #pragma multi_compile _ ETC1_EXTERNAL_ALPHA // ------------------------------------- // Universal Pipeline keywords - #pragma multi_compile _ _MAIN_LIGHT_SHADOWS - #pragma multi_compile _ MAIN_LIGHT_CALCULATE_SHADOWS - #pragma multi_compile _ REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR - #pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE + #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS #pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS #pragma multi_compile _ _SHADOWS_SOFT @@ -116,9 +112,8 @@ Shader "Universal Render Pipeline/Spine/Sprite" // Unity defined keywords #pragma multi_compile _ DIRLIGHTMAP_COMBINED #pragma multi_compile _ LIGHTMAP_ON - #pragma multi_compile_fog - //-------------------------------------- + //-------------------------------------- // GPU Instancing #pragma multi_compile_instancing