Advertisement
napland

OrderInLayerController

Jun 28th, 2016
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.08 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class OrderInLayerController : MonoBehaviour
  5. {
  6.     SpriteInfo[] spriteInfos;
  7.     public Transform bottom;
  8.     void Start()
  9.     {
  10.         SpriteRenderer[] spriteRenderers = LayerHelper.GetSpriteRenderers(transform);    //GetComponentsInChildren<SpriteRenderer>();
  11.         int minOrder = int.MaxValue;
  12.         int maxOrder = int.MinValue;
  13.  
  14.         if (spriteRenderers != null && spriteRenderers.Length > 0)
  15.         {
  16.             foreach (var item in spriteRenderers)
  17.             {
  18.                 if (item.sortingOrder < minOrder)
  19.                     minOrder = item.sortingOrder;
  20.  
  21.                 if (item.sortingOrder > maxOrder)
  22.                     maxOrder = item.sortingOrder;
  23.             }
  24.         }
  25.         else
  26.         {
  27.             Debug.LogError("Sprite renderers is empty or null");
  28.             enabled = false;
  29.             return;
  30.         }
  31.  
  32.  
  33.         spriteInfos = new SpriteInfo[spriteRenderers.Length];
  34.  
  35.         for (int i = 0; i < spriteRenderers.Length; i++)
  36.         {
  37.             int offset = spriteRenderers[i].sortingOrder - minOrder; // method in question
  38.             spriteInfos[i] = new SpriteInfo(spriteRenderers[i], offset);
  39.         }
  40.  
  41.         //SetDepth(10);
  42.     }
  43.  
  44.     void Update()
  45.     {
  46.         SetDepth(bottom.position.y);
  47.     }
  48.  
  49.     void SetDepth(float y)
  50.     {
  51.         int lowestOrder = Mathf.RoundToInt(-y * 10);
  52.  
  53.         if(spriteInfos == null || spriteInfos.Length <= 0)
  54.         {
  55.             Debug.LogError("SpriteInfos is empty!");
  56.             return;
  57.         }
  58.  
  59.         for (int i = 0; i < spriteInfos.Length; i++)
  60.         {
  61.             spriteInfos[i].spriteRenderer.sortingOrder =
  62.                 lowestOrder + spriteInfos[i].orderInLayerOffset;
  63.         }
  64.     }
  65. }
  66.  
  67. public class SpriteInfo
  68. {
  69.     public SpriteRenderer spriteRenderer;
  70.     public int orderInLayerOffset;
  71.  
  72.     public SpriteInfo(SpriteRenderer spriteRenderer, int orderInLayerOffset)
  73.     {
  74.         this.spriteRenderer = spriteRenderer;
  75.         this.orderInLayerOffset = orderInLayerOffset;
  76.     }
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement