[unity] Improved UpdateWhenInvisible logic for SkeletonRenderSeparator. Closes #2519.

This commit is contained in:
Harald Csaszar 2024-05-06 20:46:14 +02:00
parent 9904398400
commit 77e859cb31

View File

@ -73,6 +73,7 @@ namespace Spine.Unity {
[Tooltip("Copies MeshRenderer flags into each parts renderer")]
public bool copyMeshRendererFlags = true;
public List<Spine.Unity.SkeletonPartsRenderer> partsRenderers = new List<SkeletonPartsRenderer>();
[System.NonSerialized] public bool isVisible = true;
#if UNITY_EDITOR
void Reset () {
@ -197,6 +198,10 @@ namespace Spine.Unity {
skeletonRenderer.LateUpdateMesh();
}
public void Update () {
UpdateVisibility();
}
public void OnDisable () {
if (skeletonRenderer == null) return;
#if SPINE_OPTIONAL_RENDEROVERRIDE
@ -206,6 +211,24 @@ namespace Spine.Unity {
ClearPartsRendererMeshes();
}
public void UpdateVisibility () {
foreach (SkeletonPartsRenderer partsRenderer in partsRenderers) {
if (partsRenderer == null) continue;
if (partsRenderer.MeshRenderer.isVisible) {
if (!isVisible) {
skeletonRenderer.OnBecameVisible();
isVisible = true;
}
return;
}
}
if (isVisible) {
isVisible = false;
skeletonRenderer.OnBecameInvisible();
}
}
MaterialPropertyBlock copiedBlock;
void HandleRender (SkeletonRendererInstruction instruction) {