CinemachineState.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using Cinemachine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. namespace UnityCommon
  6. {
  7. public class CinemachineState : CameraState
  8. {
  9. public CinemachineState(Camera camera) : base(camera)
  10. {
  11. }
  12. CinemachineBrain cinemachineBrain;
  13. CinemachineVirtualCamera virtualCamera;
  14. private float fov = 40;
  15. public override void Enter()
  16. {
  17. base.Enter();
  18. m_camera.enabled = true;
  19. cinemachineBrain = m_camera.gameObject.AddComponentOnlyOne<CinemachineBrain>();
  20. Utility.DelayExe(2, () =>
  21. {
  22. virtualCamera = cinemachineBrain.ActiveVirtualCamera.VirtualCameraGameObject.GetComponent<CinemachineVirtualCamera>();
  23. fov = virtualCamera.m_Lens.FieldOfView;
  24. });
  25. }
  26. public override void Exit()
  27. {
  28. base.Exit();
  29. if (virtualCamera != null)
  30. virtualCamera.m_Lens.FieldOfView = fov;
  31. cinemachineBrain.enabled = false;
  32. GameObject.Destroy(cinemachineBrain);
  33. cinemachineBrain = null;
  34. }
  35. public override void OnZoom(float zoom)
  36. {
  37. base.OnZoom(zoom);
  38. //Debug.Log(cinemachineBrain);
  39. if (virtualCamera)
  40. {
  41. virtualCamera.m_Lens.FieldOfView = Mathf.Clamp(virtualCamera.m_Lens.FieldOfView + (zoom * -10), 40, 70);
  42. }
  43. }
  44. }
  45. }