Camera shake while following Player

Right now I am using this code in the Main Camera which follows the Player.

using UnityEngine;
using System.Collections;

public class CameraShake : MonoBehaviour {

	public float duration = 0.5f;
	public float speedBump = 1.0f;
	public float magnitude = 0.1f;

	void Update(){
		if(Input.GetButtonDown("Fire2")){
			StartCoroutine(Shake());
		}
	}

	IEnumerator Shake() {
		
		float elapsed = 0.0f;
		
		Vector3 originalCamPos = Camera.main.transform.position;
		
		while (elapsed < duration) {
			
			elapsed += Time.deltaTime;          
			
			float percentComplete = elapsed / duration;        
			float damper = 1.0f - Mathf.Clamp(4.0f * percentComplete - 3.0f, 0.0f, 1.0f);
			
			// map value to [-1, 1]
			var x = Random.value * 2.0f - 1.0f;
			var y = Random.value * 2.0f - 1.0f;
			x *= magnitude * damper * originalCamPos.x;
			y *= magnitude * damper * originalCamPos.y;

			
			Camera.main.transform.position = new Vector3(x, y, originalCamPos.z);
			
			yield return null;
		}
	}
}

Although it does shake when I hit “Fire2”, it reverts the the original camera position, then shakes, and only returns following the Player when it is finished shaking. I have tired playing around with this code but haven’t gotten any success with it. Thanks!

This worked instead:

using UnityEngine;
using System.Collections;

public class CameraShake : MonoBehaviour {

		private Vector3 originPosition;
		private Quaternion originRotation;
		public float shake_decay;
		public float shake_intensity;

		
		void Update (){
		if (Input.GetButtonDown("Fire2")){
			ShakeCamera();
		}
			if (shake_intensity > 0){
				transform.position = originPosition + Random.insideUnitSphere * shake_intensity;
				transform.rotation = new Quaternion(
					originRotation.x + Random.Range (-shake_intensity,shake_intensity) * .2f,
					originRotation.y + Random.Range (-shake_intensity,shake_intensity) * .2f,
					originRotation.z + Random.Range (-shake_intensity,shake_intensity) * .2f,
					originRotation.w + Random.Range (-shake_intensity,shake_intensity) * .2f);
				shake_intensity -= shake_decay;
			}
		}
		
		public void ShakeCamera(){
			originPosition = transform.position;
			originRotation = transform.rotation;
			shake_intensity = .1f;
			shake_decay = 0.02f;
		}
	}