diff --git a/spine-unity/Assets/spine-unity/SkeletonRenderer.cs b/spine-unity/Assets/spine-unity/SkeletonRenderer.cs index d53bd8efe..a89e18f2e 100644 --- a/spine-unity/Assets/spine-unity/SkeletonRenderer.cs +++ b/spine-unity/Assets/spine-unity/SkeletonRenderer.cs @@ -63,6 +63,7 @@ public class SkeletonRenderer : MonoBehaviour { private MeshFilter meshFilter; private Mesh mesh1, mesh2; private bool useMesh1; + private bool meshUpdateRequested; private float[] tempVertices = new float[8]; private Vector3[] vertices; private Color32[] colors; @@ -72,6 +73,10 @@ public class SkeletonRenderer : MonoBehaviour { private readonly ExposedList submeshMaterials = new ExposedList(); private readonly ExposedList submeshes = new ExposedList(); + public void RequestMeshUpdate() { + meshUpdateRequested = true; + } + public virtual void Reset () { if (meshFilter != null) meshFilter.sharedMesh = null; @@ -167,9 +172,12 @@ public class SkeletonRenderer : MonoBehaviour { } public virtual void LateUpdate () { - if (!valid || !meshRenderer.enabled) + if (!valid || (!meshRenderer.enabled && !meshUpdateRequested)) return; + // The force update request is only valid for one frame + meshUpdateRequested = false; + // Count vertices and submesh triangles. int vertexCount = 0; int submeshTriangleCount = 0, submeshFirstVertex = 0, submeshStartSlotIndex = 0; diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilitySubmeshRenderer.cs b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilitySubmeshRenderer.cs index 40e3ffbc5..c20e61998 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilitySubmeshRenderer.cs +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilitySubmeshRenderer.cs @@ -11,9 +11,11 @@ public class SkeletonUtilitySubmeshRenderer : MonoBehaviour { public int sortingLayerID = 0; public Material hiddenPassMaterial; Renderer cachedRenderer; + SkeletonRenderer parentSkeletonRenderer; MeshFilter filter; Material[] sharedMaterials; MeshFilter parentFilter; + bool isFirstUpdate = true; void Awake () { cachedRenderer = GetComponent(); @@ -43,23 +45,29 @@ public class SkeletonUtilitySubmeshRenderer : MonoBehaviour { parentFilter = parentRenderer.GetComponent(); mesh = parentFilter.sharedMesh; filter.sharedMesh = mesh; - Debug.Log("Mesh: " + mesh); + parentSkeletonRenderer = parentRenderer.GetComponent(); + Debug.Log("Mesh: " + (mesh == null ? "null" : mesh.name), parentFilter); } public void Update () { + if (cachedRenderer == null) + cachedRenderer = GetComponent(); + + if (isFirstUpdate || cachedRenderer.enabled) { + parentSkeletonRenderer.RequestMeshUpdate(); + isFirstUpdate = false; + } + if (mesh == null || mesh != parentFilter.sharedMesh) { mesh = parentFilter.sharedMesh; filter.sharedMesh = mesh; } - if (cachedRenderer == null) - cachedRenderer = GetComponent(); - if (mesh == null || submeshIndex > mesh.subMeshCount - 1) { cachedRenderer.enabled = false; return; } else { - GetComponent().enabled = true; + cachedRenderer.enabled = true; } bool changed = false;