Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- public class OrderInLayerController : MonoBehaviour
- {
- SpriteInfo[] spriteInfos;
- public Transform bottom;
- void Start()
- {
- SpriteRenderer[] spriteRenderers = LayerHelper.GetSpriteRenderers(transform); //GetComponentsInChildren<SpriteRenderer>();
- int minOrder = int.MaxValue;
- int maxOrder = int.MinValue;
- if (spriteRenderers != null && spriteRenderers.Length > 0)
- {
- foreach (var item in spriteRenderers)
- {
- if (item.sortingOrder < minOrder)
- minOrder = item.sortingOrder;
- if (item.sortingOrder > maxOrder)
- maxOrder = item.sortingOrder;
- }
- }
- else
- {
- Debug.LogError("Sprite renderers is empty or null");
- enabled = false;
- return;
- }
- spriteInfos = new SpriteInfo[spriteRenderers.Length];
- for (int i = 0; i < spriteRenderers.Length; i++)
- {
- int offset = spriteRenderers[i].sortingOrder - minOrder; // method in question
- spriteInfos[i] = new SpriteInfo(spriteRenderers[i], offset);
- }
- //SetDepth(10);
- }
- void Update()
- {
- SetDepth(bottom.position.y);
- }
- void SetDepth(float y)
- {
- int lowestOrder = Mathf.RoundToInt(-y * 10);
- if(spriteInfos == null || spriteInfos.Length <= 0)
- {
- Debug.LogError("SpriteInfos is empty!");
- return;
- }
- for (int i = 0; i < spriteInfos.Length; i++)
- {
- spriteInfos[i].spriteRenderer.sortingOrder =
- lowestOrder + spriteInfos[i].orderInLayerOffset;
- }
- }
- }
- public class SpriteInfo
- {
- public SpriteRenderer spriteRenderer;
- public int orderInLayerOffset;
- public SpriteInfo(SpriteRenderer spriteRenderer, int orderInLayerOffset)
- {
- this.spriteRenderer = spriteRenderer;
- this.orderInLayerOffset = orderInLayerOffset;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement