Si el jugador se mueve en Update y la cámara también, pueden aparecer pequeñas inconsistencias.
Probar seguimiento en:
LateUpdate()
Agregar detección con:
Raycast
SphereCast
Usar:
Mathf.Clamp(pitch, minimo, maximo);
Usar suavizado:
Vector3.SmoothDamp(...)
Quaternion.Slerp(...)
Revisar cámaras activas y dejar un solo AudioListener activo.