UI3DDisplayRecord.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using UnityEngine;
  2. namespace YIUIFramework
  3. {
  4. /// <summary>
  5. /// 用于记录原始层,并在渲染器中可见。
  6. /// </summary>
  7. public sealed class UI3DDisplayRecord : MonoBehaviour
  8. {
  9. private int m_Layer;
  10. private bool m_Visible;
  11. private Renderer m_AttachRenderer;
  12. private UI3DDisplayCamera m_ShowCamera;
  13. internal void Initialize(Renderer renderer, UI3DDisplayCamera camera)
  14. {
  15. m_AttachRenderer = renderer;
  16. m_ShowCamera = camera;
  17. m_Layer = renderer.gameObject.layer;
  18. m_Visible = renderer.enabled;
  19. }
  20. private static bool IsParentOf(Transform obj, Transform parent)
  21. {
  22. if (obj == parent)
  23. {
  24. return true;
  25. }
  26. if (obj.parent == null)
  27. {
  28. return false;
  29. }
  30. return IsParentOf(obj.parent, parent);
  31. }
  32. private void OnTransformParentChanged()
  33. {
  34. if (m_ShowCamera == null ||
  35. !IsParentOf(transform, m_ShowCamera.transform))
  36. {
  37. this.SafeDestroySelf();
  38. }
  39. }
  40. private void OnDestroy()
  41. {
  42. if (m_AttachRenderer != null)
  43. {
  44. m_AttachRenderer.enabled = m_Visible;
  45. }
  46. gameObject.layer = m_Layer;
  47. }
  48. }
  49. }