NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Framework/CameraManager.cs

117 lines
3.0 KiB
C#

using UnityEngine;
using UnityEngine.Rendering.Universal;
namespace PhxhSDK
{
public class CameraManager : Singlenton<CameraManager>, IInitable
{
public RenderTexture DefaultRenderTarget { get; set; }
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<Camera>();
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<Camera>();
}
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;
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<UniversalAdditionalCameraData>();
// additionalData.cameraStack.Clear();
// additionalData.cameraStack.Add(UICamera);
// additionalData.cameraStack.Add(SkillCamera);
// }
public void Release()
{
}
}
}