mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-02 05:39:07 +08:00
fixed SkeletonUtilitySubmeshRenderer
This commit is contained in:
parent
5336eedc2f
commit
292f8a6404
@ -63,6 +63,7 @@ public class SkeletonRenderer : MonoBehaviour {
|
|||||||
private MeshFilter meshFilter;
|
private MeshFilter meshFilter;
|
||||||
private Mesh mesh1, mesh2;
|
private Mesh mesh1, mesh2;
|
||||||
private bool useMesh1;
|
private bool useMesh1;
|
||||||
|
private bool meshUpdateRequested;
|
||||||
private float[] tempVertices = new float[8];
|
private float[] tempVertices = new float[8];
|
||||||
private Vector3[] vertices;
|
private Vector3[] vertices;
|
||||||
private Color32[] colors;
|
private Color32[] colors;
|
||||||
@ -72,6 +73,10 @@ public class SkeletonRenderer : MonoBehaviour {
|
|||||||
private readonly ExposedList<Material> submeshMaterials = new ExposedList<Material>();
|
private readonly ExposedList<Material> submeshMaterials = new ExposedList<Material>();
|
||||||
private readonly ExposedList<Submesh> submeshes = new ExposedList<Submesh>();
|
private readonly ExposedList<Submesh> submeshes = new ExposedList<Submesh>();
|
||||||
|
|
||||||
|
public void RequestMeshUpdate() {
|
||||||
|
meshUpdateRequested = true;
|
||||||
|
}
|
||||||
|
|
||||||
public virtual void Reset () {
|
public virtual void Reset () {
|
||||||
if (meshFilter != null)
|
if (meshFilter != null)
|
||||||
meshFilter.sharedMesh = null;
|
meshFilter.sharedMesh = null;
|
||||||
@ -167,9 +172,12 @@ public class SkeletonRenderer : MonoBehaviour {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public virtual void LateUpdate () {
|
public virtual void LateUpdate () {
|
||||||
if (!valid || !meshRenderer.enabled)
|
if (!valid || (!meshRenderer.enabled && !meshUpdateRequested))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// The force update request is only valid for one frame
|
||||||
|
meshUpdateRequested = false;
|
||||||
|
|
||||||
// Count vertices and submesh triangles.
|
// Count vertices and submesh triangles.
|
||||||
int vertexCount = 0;
|
int vertexCount = 0;
|
||||||
int submeshTriangleCount = 0, submeshFirstVertex = 0, submeshStartSlotIndex = 0;
|
int submeshTriangleCount = 0, submeshFirstVertex = 0, submeshStartSlotIndex = 0;
|
||||||
|
|||||||
@ -11,9 +11,11 @@ public class SkeletonUtilitySubmeshRenderer : MonoBehaviour {
|
|||||||
public int sortingLayerID = 0;
|
public int sortingLayerID = 0;
|
||||||
public Material hiddenPassMaterial;
|
public Material hiddenPassMaterial;
|
||||||
Renderer cachedRenderer;
|
Renderer cachedRenderer;
|
||||||
|
SkeletonRenderer parentSkeletonRenderer;
|
||||||
MeshFilter filter;
|
MeshFilter filter;
|
||||||
Material[] sharedMaterials;
|
Material[] sharedMaterials;
|
||||||
MeshFilter parentFilter;
|
MeshFilter parentFilter;
|
||||||
|
bool isFirstUpdate = true;
|
||||||
|
|
||||||
void Awake () {
|
void Awake () {
|
||||||
cachedRenderer = GetComponent<Renderer>();
|
cachedRenderer = GetComponent<Renderer>();
|
||||||
@ -43,23 +45,29 @@ public class SkeletonUtilitySubmeshRenderer : MonoBehaviour {
|
|||||||
parentFilter = parentRenderer.GetComponent<MeshFilter>();
|
parentFilter = parentRenderer.GetComponent<MeshFilter>();
|
||||||
mesh = parentFilter.sharedMesh;
|
mesh = parentFilter.sharedMesh;
|
||||||
filter.sharedMesh = mesh;
|
filter.sharedMesh = mesh;
|
||||||
Debug.Log("Mesh: " + mesh);
|
parentSkeletonRenderer = parentRenderer.GetComponent<SkeletonRenderer>();
|
||||||
|
Debug.Log("Mesh: " + (mesh == null ? "null" : mesh.name), parentFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Update () {
|
public void Update () {
|
||||||
|
if (cachedRenderer == null)
|
||||||
|
cachedRenderer = GetComponent<Renderer>();
|
||||||
|
|
||||||
|
if (isFirstUpdate || cachedRenderer.enabled) {
|
||||||
|
parentSkeletonRenderer.RequestMeshUpdate();
|
||||||
|
isFirstUpdate = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (mesh == null || mesh != parentFilter.sharedMesh) {
|
if (mesh == null || mesh != parentFilter.sharedMesh) {
|
||||||
mesh = parentFilter.sharedMesh;
|
mesh = parentFilter.sharedMesh;
|
||||||
filter.sharedMesh = mesh;
|
filter.sharedMesh = mesh;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cachedRenderer == null)
|
|
||||||
cachedRenderer = GetComponent<Renderer>();
|
|
||||||
|
|
||||||
if (mesh == null || submeshIndex > mesh.subMeshCount - 1) {
|
if (mesh == null || submeshIndex > mesh.subMeshCount - 1) {
|
||||||
cachedRenderer.enabled = false;
|
cachedRenderer.enabled = false;
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
GetComponent<Renderer>().enabled = true;
|
cachedRenderer.enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user