using UnityEngine; using Unity.Cinemachine; using System.Collections; using Pixelplacement; public class cameraSwitcherNailBird : MonoBehaviour { [SerializeField] private CinemachineCamera virtualCamera; [SerializeField] private CinemachineConfiner2D confiner2D; [SerializeField] private float zoomOutOrthoSize = 27f; [SerializeField] private float normalOrthoSize = 20f; [SerializeField] private float transitionDuration = 0.5f; // Duration of the transition private int playerInsideCount = 0; private Coroutine zoomCoroutine; private void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag("Player")) { playerInsideCount++; if (playerInsideCount == 1 && virtualCamera != null) { if (zoomCoroutine != null) StopCoroutine(zoomCoroutine); zoomCoroutine = StartCoroutine(SmoothOrthoSize(virtualCamera, zoomOutOrthoSize, transitionDuration)); } } } private void OnTriggerExit2D(Collider2D other) { if (other.CompareTag("Player")) { playerInsideCount--; if (playerInsideCount == 0 && virtualCamera != null) { if (zoomCoroutine != null) StopCoroutine(zoomCoroutine); zoomCoroutine = StartCoroutine(SmoothOrthoSize(virtualCamera, normalOrthoSize, transitionDuration)); } } } private IEnumerator SmoothOrthoSize(CinemachineCamera cam, float targetSize, float duration) { float startSize = cam.Lens.OrthographicSize; float elapsed = 0f; while (elapsed < duration) { elapsed += Time.deltaTime; cam.Lens.OrthographicSize = Mathf.Lerp(startSize, targetSize, elapsed / duration); if (confiner2D != null) { confiner2D.InvalidateBoundingShapeCache(); } yield return null; } cam.Lens.OrthographicSize = targetSize; if (confiner2D != null) { confiner2D.InvalidateBoundingShapeCache(); } } }