using UnityEngine; public class CameraHeadBobbing : MonoBehaviour { public float bobFrequency = 2f; public float bobAmplitude = 0.05f; public float swayAmplitude = 0.02f; public float transitionSpeed = 5f; public CharacterMovement movementScript; // Reference to your character movement private Vector3 initialLocalPos; private float timer; void Start() { initialLocalPos = transform.localPosition; } void Update() { bool isWalking = movementScript != null && movementScript.state == CharacterMovement.MovementState.Walking; if (isWalking) { timer += Time.deltaTime * bobFrequency; float verticalOffset = Mathf.Sin(timer * Mathf.PI * 2f) * bobAmplitude; float sideOffset = Mathf.Sin(timer * Mathf.PI) * swayAmplitude; Vector3 targetOffset = new Vector3(sideOffset, verticalOffset, 0); transform.localPosition = Vector3.Lerp(transform.localPosition, initialLocalPos + targetOffset, Time.deltaTime * transitionSpeed); } else { // Reset to original position smoothly transform.localPosition = Vector3.Lerp(transform.localPosition, initialLocalPos, Time.deltaTime * transitionSpeed); } } }