private void Reset()
        {
            m_HorizontalAxis = new AxisBase {
                m_Value = 0, m_MinValue = -180, m_MaxValue = 180, m_Wrap = true
            };
            m_HorizontalInput = new CinemachineInputAxisDriver
            {
                multiplier = 2f,
                accelTime  = 0.5f,
                decelTime  = 0.5f,
                name       = "Mouse X",
            };
            m_HorizontalRecentering = new AxisState.Recentering(false, 1, 2);

            m_VerticalAxis = new AxisBase {
                m_Value = 0, m_MinValue = -70, m_MaxValue = 70, m_Wrap = false
            };
            m_VerticalInput = new CinemachineInputAxisDriver
            {
                multiplier = -2,
                accelTime  = 0.5f,
                decelTime  = 0.5f,
                name       = "Mouse Y",
            };
            m_VerticalRecentering = new AxisState.Recentering(false, 1, 2);
        }
        /// <summary>
        /// Update the X axis and calculate the heading.  This can be called by a delegate
        /// with a custom axis.
        /// <param name="deltaTime">Used for damping.  If less than 0, no damping is done.</param>
        /// <param name="up">World Up, set by the CinemachineBrain</param>
        /// <param name="axis"></param>
        /// <param name="recentering"></param>
        /// <param name="isLive"/>true if the vcam is live</param>
        /// <returns>Axis value</returns>
        /// </summary>
        public float UpdateHeading(
            float deltaTime, Vector3 up, ref AxisState axis,
            ref AxisState.Recentering recentering, bool isLive)
        {
            if (m_BindingMode == BindingMode.SimpleFollowWithWorldUp)
            {
                axis.m_MinValue = -180;
                axis.m_MaxValue = 180;
            }

            // Only read joystick when game is playing
            if (deltaTime < 0 || !VirtualCamera.PreviousStateIsValid || !isLive)
            {
                axis.Reset();
                recentering.CancelRecentering();
            }
            else if (axis.Update(deltaTime))
            {
                recentering.CancelRecentering();
            }

            if (m_BindingMode == BindingMode.SimpleFollowWithWorldUp)
            {
                float finalHeading = axis.Value;
                axis.Value = 0;
                return(finalHeading);
            }

            float targetHeading = GetTargetHeading(axis.Value, GetReferenceOrientation(up));

            recentering.DoRecentering(ref axis, deltaTime, targetHeading);
            return(axis.Value);
        }
        /// <summary>
        /// Update the X axis and calculate the heading.  This can be called by a delegate
        /// with a custom axis.
        /// <param name="deltaTime">Used for damping.  If less than 0, no damping is done.</param>
        /// <param name="up">World Up, set by the CinemachineBrain</param>
        /// <param name="axis"></param>
        /// <param name="recentering"></param>
        /// <returns>Axis value</returns>
        /// </summary>
        public float UpdateHeading(
            float deltaTime, Vector3 up, ref AxisState axis, ref AxisState.Recentering recentering)
        {
            // Only read joystick when game is playing
            if (deltaTime < 0 || !CinemachineCore.Instance.IsLive(VirtualCamera))
            {
                axis.Reset();
                recentering.CancelRecentering();
            }
            else if (axis.Update(deltaTime))
            {
                recentering.CancelRecentering();
            }

            float targetHeading = GetTargetHeading(axis.Value, GetReferenceOrientation(up), deltaTime);

            if (m_BindingMode != BindingMode.SimpleFollowWithWorldUp)
            {
                axis.Value = recentering.DoRecentering(axis.Value, deltaTime, targetHeading);
            }

            float finalHeading = axis.Value;

            if (m_BindingMode == BindingMode.SimpleFollowWithWorldUp)
            {
                axis.Value = 0;
            }
            return(finalHeading);
        }