Search Unity

Question Cinemachine is sometimes rotating too fast

Discussion in 'Cinemachine' started by Mudias, Aug 30, 2022.

  1. Mudias

    Mudias

    Joined:
    Jan 19, 2019
    Posts:
    5
    I'm kind of new to Unity, and I'm trying to make a 3rd person and 1st person camera. The cameras were rotating fine before, but right now for some reason they are rotating too fast sometimes even though I didn't change anything in the scripts. Here is the script and the components:

    Code (CSharp):
    1. using UnityEngine;
    2. using Cinemachine;
    3.  
    4. public class CameraController : MonoBehaviour
    5. {
    6.     [SerializeField] HumanoidLandInput _input;
    7.  
    8.     [SerializeField] float _cameraZoomModifier = 32.0f;
    9.  
    10.     float _minCameraZoomDistance = 1.125f;
    11.     float _maxCameraZoomDistance = 3.0f;
    12.  
    13.     CinemachineVirtualCamera _activeCamera;
    14.     int _activeCameraPriorityModifer = 31337;
    15.  
    16.     public Camera MainCamera;
    17.     public CinemachineVirtualCamera cinemachine1stPerson;
    18.     public CinemachineVirtualCamera cinemachine3rdPerson;
    19.     CinemachineFramingTransposer _cinemachineFramingTransposer3rdPerson;
    20.  
    21.     private void Awake()
    22.     {
    23.         _cinemachineFramingTransposer3rdPerson = cinemachine3rdPerson.GetCinemachineComponent<CinemachineFramingTransposer>();
    24.     }
    25.  
    26.     private void Start()
    27.     {
    28.         ChangeCamera(); // First time through, lets set the default camera.
    29.     }
    30.  
    31.     private void Update()
    32.     {
    33.         if (!(_input.ZoomCameraInput == 0.0f)) { ZoomCamera();  }
    34.         if (_input.ChangeCameraWasPressedThisFrame) { ChangeCamera(); }
    35.     }
    36.  
    37.     private void ZoomCamera()
    38.     {
    39.         if (_activeCamera == cinemachine3rdPerson)
    40.         {
    41.             _cinemachineFramingTransposer3rdPerson.m_CameraDistance = Mathf.Clamp(_cinemachineFramingTransposer3rdPerson.m_CameraDistance +
    42.                                 (_input.InvertScroll ? _input.ZoomCameraInput : -_input.ZoomCameraInput) / _cameraZoomModifier,
    43.                                 _minCameraZoomDistance,
    44.                                 _maxCameraZoomDistance);
    45.         }
    46.     }
    47.  
    48.     private void ChangeCamera()
    49.     {
    50.         if (cinemachine3rdPerson == _activeCamera)
    51.         {
    52.             SetCameraPriorities(cinemachine3rdPerson, cinemachine1stPerson);
    53.             MainCamera.cullingMask &= ~(1 << LayerMask.NameToLayer("Player (Self)"));
    54.         }
    55.         else if (cinemachine1stPerson == _activeCamera)
    56.         {
    57.             SetCameraPriorities(cinemachine1stPerson, cinemachine3rdPerson);
    58.             _activeCamera = cinemachine3rdPerson;
    59.             MainCamera.cullingMask |= 1 << LayerMask.NameToLayer("Player (Self)");
    60.         }
    61.         else // for first time through or if there's an error
    62.         {
    63.             cinemachine3rdPerson.Priority += _activeCameraPriorityModifer;
    64.             _activeCamera = cinemachine3rdPerson;
    65.         }
    66.     }
    67.  
    68.     private void SetCameraPriorities(CinemachineVirtualCamera CurrentCameraMode, CinemachineVirtualCamera NewCameraMode)
    69.     {
    70.         CurrentCameraMode.Priority -= _activeCameraPriorityModifer;
    71.         NewCameraMode.Priority += _activeCameraPriorityModifer;
    72.         _activeCamera = NewCameraMode;
    73.     }
    74. }
    75.  




     
    Last edited: Aug 31, 2022
  2. Gregoryl

    Gregoryl

    Unity Technologies

    Joined:
    Dec 22, 2016
    Posts:
    7,730
    You camera setup doesn't have any built-in rotation, it just does whatever the Follow target does. So you need to look at your scripts that are controlling the Follow target's rotation.