Pārlūkot izejas kodu

fixed SkeletonUtilitySubmeshRenderer

ZimM 10 gadi atpakaļ
vecāks
revīzija
292f8a6404

+ 9 - 1
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<Material> submeshMaterials = new ExposedList<Material>();
 	private readonly ExposedList<Submesh> submeshes = new ExposedList<Submesh>();
 
+	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;

+ 13 - 5
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<Renderer>();
@@ -43,23 +45,29 @@ public class SkeletonUtilitySubmeshRenderer : MonoBehaviour {
 		parentFilter = parentRenderer.GetComponent<MeshFilter>();
 		mesh = parentFilter.sharedMesh;
 		filter.sharedMesh = mesh;
-		Debug.Log("Mesh: " + mesh);
+		parentSkeletonRenderer = parentRenderer.GetComponent<SkeletonRenderer>();
+		Debug.Log("Mesh: " + (mesh == null ? "null" : mesh.name), parentFilter);
 	}
 
 	public void Update () {
+		if (cachedRenderer == null)
+			cachedRenderer = GetComponent<Renderer>();
+
+		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<Renderer>();
-
 		if (mesh == null || submeshIndex > mesh.subMeshCount - 1) {
 			cachedRenderer.enabled = false;
 			return;
 		} else {
-			GetComponent<Renderer>().enabled = true;
+			cachedRenderer.enabled = true;
 		}
 
 		bool changed = false;