Example-Code / Editor Scripts / SpriteInfoDetector.cs
SpriteInfoDetector.cs
Raw
using UnityEditor;
using UnityEngine;
using UnityEngine.Profiling;
using UnityEngine.U2D;
namespace CCG.Bigfoot.Editor
{
    /// <summary>
    /// Displays the Triangle and Vertex count for the object that is selected in the hierarchy and objects underneath it.
    /// </summary> 
    /// <remarks>
    /// Authors: CS
    /// Created: 2024-01-23
    /// </remarks>
    public sealed class SpriteInfoDetector : EditorWindow
    {
        private int _totalVertices = 0;
        private int _totalTriangles = 0;
        private Vector2 _scrollPosition = Vector2.zero;
        private const string _windowName = "SpriteRenderer Info";
        private long _totalMemory = 0;
        private SpriteRenderer[] _spriteRenderers;

        [MenuItem("Tools/SpriteRenderer Info")]
        static void Init()
        {
            SpriteInfoDetector window = (SpriteInfoDetector)EditorWindow.GetWindow(typeof(SpriteInfoDetector));
            window.titleContent.text = _windowName;
        }

        void OnSelectionChange()
        {
            Repaint();
        }

        void OnGUI()
        {
            if (Selection.activeGameObject)
            {
                _spriteRenderers = Selection.activeGameObject.GetComponentsInChildren<SpriteRenderer>();

                _totalVertices = 0;
                _totalTriangles = 0;
                _totalMemory = 0;

                _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition);

                foreach (SpriteRenderer spriteRenderer in _spriteRenderers)
                {
                    if (spriteRenderer)
                    {
                        int vertexCount = spriteRenderer.sprite.GetVertexCount();
                        int triangleCount = spriteRenderer.sprite.triangles.Length / 3;
                        long memorySize = Profiler.GetRuntimeMemorySizeLong(spriteRenderer.gameObject);

                        _totalVertices += vertexCount;
                        _totalTriangles += triangleCount;
                        _totalMemory += memorySize;

                        EditorGUILayout.LabelField(spriteRenderer.gameObject.name);
                        EditorGUILayout.LabelField("Vertices: ", vertexCount.ToString());
                        EditorGUILayout.LabelField("Triangles: ", triangleCount.ToString());
                        EditorGUILayout.LabelField("Memory: ", EditorUtility.FormatBytes(memorySize));

                        GUILayout.Space(10);
                    }
                }

                EditorGUILayout.EndScrollView();

                EditorGUILayout.LabelField("Total Vertices: ", _totalVertices.ToString());
                EditorGUILayout.LabelField("Total Triangles: ", _totalTriangles.ToString());
                EditorGUILayout.LabelField("Total Memory: ", EditorUtility.FormatBytes(_totalMemory));
            }
        }
    }
}