UI3DDisplayCamera.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. namespace YIUIFramework
  4. {
  5. public sealed class UI3DDisplayCamera : MonoBehaviour
  6. {
  7. private GameObject m_ShowObject;
  8. internal GameObject ShowObject
  9. {
  10. get => m_ShowObject;
  11. set
  12. {
  13. if (m_ShowObject != null &&
  14. m_ShowObject != value)
  15. {
  16. ResetRenderer(m_ShowObject.transform);
  17. }
  18. m_ShowObject = value;
  19. if (value != null)
  20. SetupRenderer(value.transform);
  21. }
  22. }
  23. private int m_ShowLayer = 0;
  24. internal int ShowLayer
  25. {
  26. get => m_ShowLayer;
  27. set
  28. {
  29. if (m_ShowLayer != value)
  30. {
  31. m_ShowLayer = value;
  32. if (ShowObject != null)
  33. SetupRenderer(ShowObject.transform);
  34. }
  35. }
  36. }
  37. private static void ResetRenderer(Transform transform)
  38. {
  39. var renderers = ListPool<Renderer>.Get();
  40. transform.GetComponentsInChildren(true, renderers);
  41. foreach (var renderer in renderers)
  42. {
  43. renderer.gameObject.layer = 0;
  44. }
  45. ListPool<Renderer>.Put(renderers);
  46. }
  47. public void SetupRenderer(Transform transform)
  48. {
  49. if (ShowObject == null) return;
  50. var renderers = ListPool<Renderer>.Get();
  51. transform.GetComponentsInChildren(true, renderers);
  52. foreach (var renderer in renderers)
  53. {
  54. renderer.gameObject.layer = ShowLayer;
  55. }
  56. ListPool<Renderer>.Put(renderers);
  57. }
  58. private void OnEnable()
  59. {
  60. if (ShowObject != null)
  61. {
  62. SetupRenderer(ShowObject.transform);
  63. }
  64. }
  65. private void OnDisable()
  66. {
  67. if (ShowObject != null)
  68. {
  69. ResetRenderer(ShowObject.transform);
  70. }
  71. }
  72. }
  73. }