using Unity.Cinemachine; using UnityEngine; using UnityEngine.InputSystem; public class HeadBobbing : MonoBehaviour { [Header("References")] [SerializeField] private InputHolder inputHolder; [SerializeField] private CinemachineCamera vCam_Idle; [SerializeField] private CinemachineCamera vCam_Walking; [SerializeField] private CinemachineCamera vCam_Sprinting; [SerializeField] private CinemachineCamera vCam_IdleCrouching; [Space] [Header("Noise Profiles")] [SerializeField] private NoiseSettings headbob_Idle; [SerializeField] private NoiseSettings headbob_Walking; [SerializeField] private NoiseSettings headbob_Sprinting; [SerializeField] private NoiseSettings headbob_IdleCrouch; private CinemachineBasicMultiChannelPerlin noiseComponent; private Vector2 playerInput; private void Update() { CheckForHeadBobTrigger(); PlayerInput(); } private void CheckForHeadBobTrigger() { bool isMoving = playerInput.sqrMagnitude > 0.01f; bool isSprinting = inputHolder.runAction.action.IsPressed(); bool isCrouching = inputHolder.crouchAction.action.WasPerformedThisFrame(); if (!isMoving) { if (isCrouching) { StartIdleCrouchingHeadBob(); } else StartIdleHeadBob(); } else { if (isSprinting) StartSprintingHeadBob(); else StartWalkingHeadBob(); } } private void StartIdleHeadBob() { SetActiveCamera(vCam_Idle); } private void StartWalkingHeadBob() { SetActiveCamera(vCam_Walking); } private void StartSprintingHeadBob() { SetActiveCamera(vCam_Sprinting); } private void StartIdleCrouchingHeadBob() { SetActiveCamera(vCam_IdleCrouching); } private void SetActiveCamera(CinemachineCamera activeCam) { vCam_Idle.Priority = 0; vCam_Walking.Priority = 0; vCam_Sprinting.Priority = 0; vCam_IdleCrouching.Priority = 0; activeCam.Priority = 10; } private void PlayerInput() { playerInput = inputHolder.moveAction.action.ReadValue<Vector2>(); } }