UIParticleOverlayCamera.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using UnityEngine;
  2. namespace UIExtensions
  3. {
  4. [ExecuteInEditMode]
  5. public class UIParticleOverlayCamera : MonoBehaviour
  6. {
  7. private Camera m_Camera;
  8. private static UIParticleOverlayCamera s_Instance;
  9. public static UIParticleOverlayCamera instance
  10. {
  11. get
  12. {
  13. if ((object)s_Instance == null)
  14. {
  15. s_Instance = (Object.FindObjectOfType<UIParticleOverlayCamera>() ?? new GameObject(typeof(UIParticleOverlayCamera).Name, typeof(UIParticleOverlayCamera)).GetComponent<UIParticleOverlayCamera>());
  16. s_Instance.gameObject.SetActive(value: true);
  17. s_Instance.enabled = true;
  18. }
  19. return s_Instance;
  20. }
  21. }
  22. private Camera cameraForOvrelay
  23. {
  24. get
  25. {
  26. if (!m_Camera)
  27. {
  28. if (!(m_Camera = GetComponent<Camera>()))
  29. {
  30. return m_Camera = base.gameObject.AddComponent<Camera>();
  31. }
  32. return m_Camera;
  33. }
  34. return m_Camera;
  35. }
  36. }
  37. public static Camera GetCameraForOvrelay(Canvas canvas)
  38. {
  39. UIParticleOverlayCamera instance = UIParticleOverlayCamera.instance;
  40. RectTransform rectTransform = canvas.rootCanvas.transform as RectTransform;
  41. Camera cameraForOvrelay = instance.cameraForOvrelay;
  42. Transform transform = instance.transform;
  43. cameraForOvrelay.enabled = false;
  44. Vector3 localPosition = rectTransform.localPosition;
  45. cameraForOvrelay.orthographic = true;
  46. cameraForOvrelay.orthographicSize = Mathf.Max(localPosition.x, localPosition.y);
  47. cameraForOvrelay.nearClipPlane = 0.3f;
  48. cameraForOvrelay.farClipPlane = 1000f;
  49. localPosition.z -= 100f;
  50. transform.localPosition = localPosition;
  51. return cameraForOvrelay;
  52. }
  53. private void Awake()
  54. {
  55. if (s_Instance == null)
  56. {
  57. s_Instance = GetComponent<UIParticleOverlayCamera>();
  58. }
  59. else if (s_Instance != this)
  60. {
  61. Debug.LogWarning("Multiple " + typeof(UIParticleOverlayCamera).Name + " in scene.", base.gameObject);
  62. base.enabled = false;
  63. Object.Destroy(base.gameObject);
  64. return;
  65. }
  66. cameraForOvrelay.enabled = false;
  67. if (Application.isPlaying)
  68. {
  69. Object.DontDestroyOnLoad(base.gameObject);
  70. }
  71. }
  72. private void OnDestroy()
  73. {
  74. if (s_Instance == this)
  75. {
  76. s_Instance = null;
  77. }
  78. }
  79. }
  80. }