diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f2dd7eb5..195f4bcdb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -237,6 +237,7 @@ * Added support for double-sided lighting at all `SkeletonLit` shaders (including URP and LWRP packages). * Added frustum culling update mode parameters `Update When Invisible` (Inspector parameter) and `UpdateMode` (available via code) to all Skeleton components. This provides a simple way to disable certain updates when the `Renderer` is no longer visible (outside all cameras, culled in frustum culling). The new `UpdateMode` property allows disabling updates at a finer granularity level than disabling the whole component. Available modes are: `Nothing`, `OnlyAnimationStatus`, `EverythingExceptMesh` and `FullUpdate`. * Added a new `Spine/Outline/OutlineOnly-ZWrite` shader to provide correct outline-only rendering. Note: the shader requires two render passes and is therefore not compatible with URP. The `Spine Examples/Other Examples/Outline Shaders` example scene has been updated to demonstrate the new shader. + * Added `OnMeshAndMaterialsUpdated` callback event to `SkeletonRenderSeparator` and `SkeletonPartsRenderer`. It is issued at the end of `LateUpdate`, before rendering. * **Changes of default values** * `SkeletonMecanim`'s `Layer Mix Mode` now defaults to `MixMode.MixNext` instead of `MixMode.MixAlways`. diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonPartsRenderer.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonPartsRenderer.cs index b27a15799..cb3479aa8 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonPartsRenderer.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonPartsRenderer.cs @@ -60,6 +60,14 @@ namespace Spine.Unity { } #endregion + #region Callback Delegates + public delegate void SkeletonPartsRendererDelegate (SkeletonPartsRenderer skeletonPartsRenderer); + + /// OnMeshAndMaterialsUpdated is called at the end of LateUpdate after the Mesh and + /// all materials have been updated. + public event SkeletonPartsRendererDelegate OnMeshAndMaterialsUpdated; + #endregion + MeshRendererBuffers buffers; SkeletonRendererInstruction currentInstructions = new SkeletonRendererInstruction(); @@ -121,6 +129,9 @@ namespace Spine.Unity { meshFilter.sharedMesh = mesh; smartMesh.instructionUsed.Set(currentInstructions); + + if (OnMeshAndMaterialsUpdated != null) + OnMeshAndMaterialsUpdated(this); } public void SetPropertyBlock (MaterialPropertyBlock block) { diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonRenderSeparator.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonRenderSeparator.cs index e4e3dd0ac..d2d187ef2 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonRenderSeparator.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderSeparator/SkeletonRenderSeparator.cs @@ -77,6 +77,12 @@ namespace Spine.Unity { #endif #endregion + #region Callback Delegates + /// OnMeshAndMaterialsUpdated is called at the end of LateUpdate after the Mesh and + /// all materials have been updated. + public event SkeletonRenderer.SkeletonRendererDelegate OnMeshAndMaterialsUpdated; + #endregion + #region Runtime Instantiation /// Adds a SkeletonRenderSeparator and child SkeletonPartsRenderer GameObjects to a given SkeletonRenderer. /// The to skeleton renderer. @@ -247,6 +253,9 @@ namespace Spine.Unity { } } + if (OnMeshAndMaterialsUpdated != null) + OnMeshAndMaterialsUpdated(this.skeletonRenderer); + // Clear extra renderers if they exist. for (; rendererIndex < rendererCount; rendererIndex++) { currentRenderer = partsRenderers[rendererIndex]; 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 754dbced7..77c7433cf 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs @@ -236,7 +236,7 @@ namespace Spine.Unity { /// OnRebuild is raised after the Skeleton is successfully initialized. public event SkeletonRendererDelegate OnRebuild; - /// OnMeshAndMaterialsUpdated is at the end of LateUpdate after the Mesh and + /// OnMeshAndMaterialsUpdated is called at the end of LateUpdate after the Mesh and /// all materials have been updated. public event SkeletonRendererDelegate OnMeshAndMaterialsUpdated;