CustomCameraStack.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using Fort23.Mono;
  2. using UnityEngine;
  3. using UnityEngine.Rendering.Universal;
  4. public class CustomCameraStack : MonoBehaviour
  5. {
  6. private UniversalAdditionalCameraData _cameraData;
  7. public Camera camera;
  8. public static CustomCameraStack currCustomCameraStack;
  9. private void OnEnable()
  10. {
  11. currCustomCameraStack = this;
  12. SetUICamera();
  13. camera = GetComponent<Camera>();
  14. }
  15. public void SetUICamera()
  16. {
  17. if (UIManager.Instance != null && UIManager.Instance.UICamera != null)
  18. {
  19. UniversalAdditionalCameraData cameraData = UIManager.Instance.UICamera.gameObject.GetComponent<UniversalAdditionalCameraData>();
  20. if (cameraData != null)
  21. {
  22. UIManager.Instance.CurrCustomCameraStack = this;
  23. cameraData.renderType = CameraRenderType.Overlay;
  24. }
  25. AddCamera(UIManager.Instance.UICamera);
  26. }
  27. }
  28. private void Update()
  29. {
  30. if (currCustomCameraStack == this && UIManager.Instance != null && UIManager.Instance.CurrCustomCameraStack == null)
  31. {
  32. SetUICamera();
  33. }
  34. }
  35. public void AddCamera(Camera camera)
  36. {
  37. if (_cameraData == null)
  38. {
  39. _cameraData = GetComponent<Camera>().GetUniversalAdditionalCameraData();
  40. }
  41. if (!_cameraData.cameraStack.Contains(camera))
  42. {
  43. _cameraData.cameraStack.Add(camera);
  44. }
  45. }
  46. public void RemoveCamera(Camera camera)
  47. {
  48. if (_cameraData == null)
  49. {
  50. _cameraData = GetComponent<Camera>().GetUniversalAdditionalCameraData();
  51. }
  52. if (_cameraData.cameraStack.Contains(camera))
  53. {
  54. _cameraData.cameraStack.Remove(camera);
  55. }
  56. }
  57. private void OnDisable()
  58. {
  59. if (_cameraData != null && _cameraData.cameraStack != null && _cameraData.cameraStack[^1] != null && UIManager.Instance.CurrCustomCameraStack == this)
  60. {
  61. UniversalAdditionalCameraData cameraData = _cameraData.cameraStack[^1].gameObject.GetComponent<UniversalAdditionalCameraData>();
  62. if (cameraData != null)
  63. {
  64. cameraData.renderType = CameraRenderType.Base;
  65. }
  66. UIManager.Instance.CurrCustomCameraStack = null;
  67. }
  68. _cameraData.cameraStack.Clear();
  69. }
  70. }