using System; using UnityEngine; using UnityEngine.Rendering.Universal; namespace PhxhSDK { public class CameraManager : Singlenton, IInitable { public RenderTexture DefaultRenderTarget { get; set; } public event Action AfterSwitchMainCamera; private Camera _mainCamera; private Camera _lastMainCamera; public Camera MainCamera { get { if (_mainCamera == null) { _mainCamera = Camera.main; } return _mainCamera; } } public Camera UICamera { get { return UIRoot.Instance.UICamera; } } public Camera SkillCamera { get; private set; } public Camera CreateCamera(string name, string tag = null) { var go = new GameObject(name); var camera = go.AddComponent(); if (tag != null) { camera.tag = tag; } return camera; } public void DestroyCamera(Camera camera) { if (camera != null) { GameObject.Destroy(camera.gameObject); } } public void ReRenderAll() { foreach (var c in Camera.allCameras) { var oldEnabled = c.enabled; c.enabled = true; c.Render(); c.enabled = oldEnabled; } } public void Init() { if (MainCamera == null) { CreateCamera("Main Camera", "MainCamera"); } if (MainCamera != null) { GameObject.DontDestroyOnLoad(MainCamera.gameObject); } SkillCamera = GameObject.Find("SkillCamera").GetComponent(); } public void SetMainCameraActive(bool isActive) { _mainCamera?.gameObject.SetActive(isActive); } public void SwitchMainCamera(Camera camera) { if (camera == null || _mainCamera == camera) return; _lastMainCamera = _mainCamera; _mainCamera = camera; _mainCamera.gameObject.SetActive(true); _mainCamera.targetTexture = DefaultRenderTarget; AfterSwitchMainCamera?.Invoke(_mainCamera); if(_lastMainCamera == null) return; _lastMainCamera.gameObject.SetActive(false); } public void RevertMainCamera() { SwitchMainCamera(_lastMainCamera); } // public void AddCameraStack(Camera camera) // { // if(camera == null) // return; // var additionalData = camera.GetComponent(); // additionalData.cameraStack.Clear(); // additionalData.cameraStack.Add(UICamera); // additionalData.cameraStack.Add(SkillCamera); // } public void Release() { } } }