fixed SkeletonUtilitySubmeshRenderer

This commit is contained in:
ZimM 2015-05-20 03:11:45 +03:00
parent 5336eedc2f
commit 292f8a6404
2 changed files with 22 additions and 6 deletions

View File

@ -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;

View File

@ -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;