Files
2026-03-03 00:39:30 +05:00

88 lines
2.4 KiB
C#

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Rendering.Universal;
[RequireComponent(typeof(PlayerInput))]
public class CameraManagement : MonoBehaviour
{
[Header("Cameras")]
public Camera baseCamera;
public Camera overlayCamera;
private PlayerInput playerInput;
private InputAction fireAction;
private float baseFOV;
private float overlayFOV;
private bool isOverlayActive = false;
private void Awake()
{
playerInput = GetComponent<PlayerInput>();
// Check if the cameras are corectly assigned
if (baseCamera == null || overlayCamera == null)
{
Debug.LogError("BaseCamera and OverlayCamera have to be assigned in the PlayerInput!");
enabled = false;
return;
}
// Get FOV
baseFOV = baseCamera.fieldOfView;
overlayFOV = overlayCamera.fieldOfView;
// Prepare URP stack
var baseData = baseCamera.GetUniversalAdditionalCameraData();
var overlayData = overlayCamera.GetUniversalAdditionalCameraData();
overlayData.renderType = CameraRenderType.Overlay;
if (!baseData.cameraStack.Contains(overlayCamera))
baseData.cameraStack.Add(overlayCamera);
// Overlay off at start
overlayCamera.gameObject.SetActive(false);
}
private void OnEnable()
{
fireAction = playerInput.actions["Fire"];
fireAction.performed += OnFirePerformed;
fireAction.canceled += OnFireCanceled;
}
private void OnDisable()
{
if (fireAction != null)
{
fireAction.performed -= OnFirePerformed;
fireAction.canceled -= OnFireCanceled;
}
}
private void OnFirePerformed(InputAction.CallbackContext ctx)
{
isOverlayActive = true;
overlayCamera.gameObject.SetActive(true);
baseCamera.fieldOfView = overlayFOV;
}
private void OnFireCanceled(InputAction.CallbackContext ctx)
{
isOverlayActive = false;
overlayCamera.gameObject.SetActive(false);
baseCamera.fieldOfView = baseFOV;
}
private void LateUpdate()
{
// Synchronise base and overlay camera rotation to avoid a jerky effect
if (isOverlayActive && overlayCamera != null && baseCamera != null)
{
overlayCamera.transform.rotation = baseCamera.transform.rotation;
}
}
}