ObjectAndMaterialCounter.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. namespace Debugging
  5. {
  6. public class ObjectAndMaterialCounter : MonoBehaviour
  7. {
  8. public float checkInterval = 1.5f;
  9. private Camera cam;
  10. private float lastCheckTime;
  11. private MeshRenderer[] allRenderers;
  12. private int visibleCounter = 0;
  13. private int objectsInBatches = 0;
  14. private int objectsNotInBatches = 0;
  15. private HashSet<string> materials = new HashSet<string>();
  16. private void OnEnable()
  17. {
  18. cam = Camera.main;
  19. allRenderers = FindObjectsOfType<MeshRenderer>();
  20. }
  21. private void OnGUI()
  22. {
  23. GUI.TextField(new Rect(20, 120, 200, 100),
  24. $"Visible Objects: {visibleCounter}\nObjects in batches: {objectsInBatches}\nObjects not in batches: {objectsNotInBatches}\n#Materials visible: {materials.Count}");
  25. GUI.TextField(new Rect(20, 220, 300, 400), $"Materials: {string.Join("\n -", materials)}");
  26. }
  27. private void Update()
  28. {
  29. if (Time.time - lastCheckTime < checkInterval) return;
  30. objectsInBatches = 0;
  31. objectsNotInBatches = 0;
  32. visibleCounter = 0;
  33. materials.Clear();
  34. lastCheckTime = Time.time;
  35. foreach (var meshRenderer in allRenderers)
  36. {
  37. if (meshRenderer.isVisible)
  38. {
  39. visibleCounter++;
  40. }
  41. if (meshRenderer.isPartOfStaticBatch)
  42. {
  43. objectsInBatches++;
  44. }
  45. else
  46. {
  47. objectsNotInBatches++;
  48. }
  49. foreach (var m in meshRenderer.materials)
  50. {
  51. materials.Add(m.name);
  52. }
  53. }
  54. }
  55. }
  56. }