Files
Genesis_Unity/Assets/02_Scripts/Managers/Local/CameraManager.cs

75 lines
1.7 KiB
C#

using Unity.Cinemachine;
using UnityEditor.Rendering;
using UnityEngine;
using UnityEngine.SceneManagement;
public class CameraManager : MonoBehaviour
{
private CameraRigBase _currentCameraRig; //현재 활성화된 플레이어의 카메라 묶음 조종객체
private float minFOV = 40f;
private float maxFOV = 100f;
private void Awake()
{
}
private void Start()
{
_ = InitializeCameraRig();
}
private void Update()
{
}
private async Awaitable InitializeCameraRig()
{
CinemachineBrain brain = Camera.main.GetComponent<CinemachineBrain>();
while (brain.ActiveVirtualCamera == null)
{
await Awaitable.NextFrameAsync();
}
// 가져오는게 실제 cinemachine카메라가 아니라 매니저일수도 있기에 MonoBehaviour로 변환후 찾기
if (brain.ActiveVirtualCamera is MonoBehaviour activeComponent)
{
_currentCameraRig = activeComponent.GetComponentInParent<CameraRigBase>();
}
}
public void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
}
public void SetCameraRig(CameraRigBase cameraRig)
{
_currentCameraRig = cameraRig;
}
public CinemachineCamera GetLiveCinemachineCamera()
{
return _currentCameraRig.LiveCmCamera;
}
public void ZoomCamera(float offset)
{
if (_currentCameraRig is AimCameraRig rig)
{
rig.CurrentFOV = Mathf.Clamp(rig.CurrentFOV - offset, minFOV, maxFOV);
}
}
public Vector3 GetViewportPointToRayEndPoint(Vector3 vpPoint,float rayLength)
{
Ray ray = Camera.main.ViewportPointToRay(vpPoint);
return ray.GetPoint(rayLength);
}
}