Advertisement
DjayP

Trying to draw sprite renderers from prefab

Dec 12th, 2019
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.20 KB | None | 0 0
  1. #if UNITY_EDITOR
  2. using System;
  3. #endif
  4. using UnityEngine;
  5.  
  6. public class Test : MonoBehaviour
  7. {
  8.     public GameObject m_item;
  9.  
  10. #if UNITY_EDITOR
  11.     private GameObject currentItem;
  12.     private SpriteRenderer[] cachedRenderers;
  13.     private GUIOps[] ops;
  14.  
  15.     private void OnDrawGizmos()
  16.     {
  17.         if (currentItem != m_item)
  18.         {
  19.             currentItem = m_item;
  20.             cachedRenderers = null;
  21.         }
  22.  
  23.         // Cache renderers
  24.         if ((cachedRenderers == null || ops == null) && currentItem != null)
  25.         {
  26.             cachedRenderers = currentItem.GetComponentsInChildren<SpriteRenderer>(true);
  27.  
  28.             ops = new GUIOps[cachedRenderers.Length];
  29.  
  30.             for (int i = 0; i != cachedRenderers.Length; i++)
  31.             {
  32.                 SpriteRenderer cachedRenderer = cachedRenderers[i];
  33.                 Sprite sprite = cachedRenderer.sprite;
  34.                 Texture2D croppedTexture = new Texture2D((int)sprite.textureRect.width, (int)sprite.textureRect.height, TextureFormat.ARGB32, false);
  35.                 Color[] pixels = sprite.texture.GetPixels(
  36.                     (int)sprite.textureRect.x,
  37.                     (int)sprite.textureRect.y,
  38.                     (int)sprite.textureRect.width,
  39.                     (int)sprite.textureRect.height
  40.                 );
  41.                 Array.Reverse(pixels);
  42.                 croppedTexture.SetPixels(pixels);
  43.                 croppedTexture.Apply();
  44.                 Vector3 size = Vector3.Scale(cachedRenderer.bounds.size, cachedRenderer.transform.lossyScale);
  45.                 ops[i] = new GUIOps
  46.                 {
  47.                     screenRect = new Rect(cachedRenderer.bounds.center - (size/2), size),
  48.                     texture = croppedTexture
  49.                 };
  50.             }
  51.         }
  52.  
  53.         if (ops != null)
  54.             for (int i = 0; i != ops.Length; i++)
  55.             {
  56.                 GUIOps op = ops[i];
  57.                 Rect rect = op.screenRect;
  58.                 rect.center += (Vector2) transform.position;
  59.                 Gizmos.DrawGUITexture(rect, op.texture);
  60.             }
  61.     }
  62.  
  63.     private class GUIOps
  64.     {
  65.         public Rect screenRect;
  66.         public Texture2D texture;
  67.     }
  68. #endif
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement