From 39dc3f25d5f91735d4c112202b3b62df5c4f0dfa Mon Sep 17 00:00:00 2001 From: olatan Date: Wed, 1 Jun 2022 04:12:30 +0200 Subject: [PATCH] SortingGroup Functionality Fix Added checkbox for using sorting group component. To use, add a sortingGroup component to the same object containing the IsoSpriteSorting component. Can likely be improved to support several hierarchies of sorting groups. --- Assets/Scripts/IsoSpriteSorting.cs | 17 +++++++++++-- Assets/Scripts/IsoSpriteSortingManager.cs | 29 +++++++++++++++++++---- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/Assets/Scripts/IsoSpriteSorting.cs b/Assets/Scripts/IsoSpriteSorting.cs index 23f05d0..e6f0413 100644 --- a/Assets/Scripts/IsoSpriteSorting.cs +++ b/Assets/Scripts/IsoSpriteSorting.cs @@ -2,6 +2,8 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +using UnityEngine.Rendering; + public class IsoSpriteSorting : MonoBehaviour { @@ -55,6 +57,8 @@ public enum SortType public Vector3 SorterPositionOffset = new Vector3(); public Vector3 SorterPositionOffset2 = new Vector3(); public Renderer[] renderersToSort; + public bool useSortingGroup; + public SortingGroup sortingGroup; private Transform t; @@ -67,6 +71,7 @@ public void SetupStaticCache() private void RefreshBounds() { + cachedBounds = new Bounds2D(renderersToSort[0].bounds); } @@ -180,9 +185,17 @@ IEnumerator Start() private void Setup() { t = transform; //This needs to be here AND in the Awake function - if (renderersToSort == null || renderersToSort.Length == 0) + if (useSortingGroup) { - renderersToSort = GetComponentsInChildren(); + sortingGroup = GetComponent(); + } + else + { + if (renderersToSort == null || renderersToSort.Length == 0) + { + //SortingGroup groupsToSort = GetComponent(); + renderersToSort = GetComponentsInChildren(); + } } IsoSpriteSortingManager.RegisterSprite(this); } diff --git a/Assets/Scripts/IsoSpriteSortingManager.cs b/Assets/Scripts/IsoSpriteSortingManager.cs index b32592d..b2929ee 100644 --- a/Assets/Scripts/IsoSpriteSortingManager.cs +++ b/Assets/Scripts/IsoSpriteSortingManager.cs @@ -27,7 +27,6 @@ public static void RegisterSprite(IsoSpriteSorting newSprite) } else { - staticSpriteList.Add(newSprite); newSprite.SetupStaticCache(); SetupStaticDependencies(newSprite); @@ -177,7 +176,15 @@ private static void SetSortOrderBasedOnListOrder(List spriteLi int count = spriteList.Count; for (int i = 0; i < count; ++i) { - spriteList[i].RendererSortingOrder = orderCurrent; + // + if (spriteList[i].useSortingGroup) + { + spriteList[i].sortingGroup.sortingOrder = orderCurrent; + } + else + { + spriteList[i].RendererSortingOrder = orderCurrent; + } orderCurrent += 1; } } @@ -187,7 +194,15 @@ private static void SetSortOrderNegative(List spriteList) int startOrder = -spriteList.Count - 1; for (int i = 0; i < spriteList.Count; ++i) { - spriteList[i].RendererSortingOrder = startOrder + i; + if (spriteList[i].useSortingGroup) + { + spriteList[i].sortingGroup.sortingOrder = startOrder + i; + } + else + { + spriteList[i].RendererSortingOrder = startOrder + i; + } + } } @@ -203,6 +218,10 @@ public static void FilterListByVisibility(List fullList, List< destinationList.Add(sprite); sprite.forceSort = false; } + else if(sprite.useSortingGroup) + { + destinationList.Add(sprite); + } else { for (int j = 0; j < sprite.renderersToSort.Length; j++) @@ -219,7 +238,7 @@ public static void FilterListByVisibility(List fullList, List< private static void SortListSimple(List list) { - list.Sort((a, b) => + list.Sort((System.Comparison)((a, b) => { if (!a || !b) { @@ -229,6 +248,6 @@ private static void SortListSimple(List list) { return IsoSpriteSorting.CompareIsoSorters(a, b); } - }); + })); } }