How to remove character control

I’m working on a 2D infinite runner game. I want the character to have a boost thing (like in Temple Run, etc), so that once a game the player can push space (or shake phone if on mobile), and the control of the character is taken over for 5 seconds so that it only plays on animation and obstacles are destroyed upon collision. The character’s Sprite Renderer color would also be red during these 5 seconds. After the 5 seconds, he’d change back to normal. What would I add / edit in this code to do this? Please help me to be on the correct path on what to do, I’m very new to scripting.

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

[RequireComponent(typeof(Rigidbody2D))]
[RequireComponent(typeof(AudioSource))]
public class RunController : MonoBehaviour 
{
	
	
	public Animator animator;								//Player animator if we using one; Animator is preconfigured for using with idle,run,jump and death animations;
	public enum Controls {JUMP_ONLY, JUMP_AND_SLIDE};		//Input types
	public Controls controls;
	public bool tapToStart;									//Tap to start playing;
	public float minSpeed = 2.5F;							//Player default speed;
	public float maxSpeed = 3.5F;							//Player max speed;
	public float speedIncreaseFactor = 0.03F;				//Player speed increasing factor;
	public float gravity = 3.0F;							//Gravity value;
	public float jumpForce = 5.0F;							//Jump power;
	public bool limitJumps = true;							//Uncheck this to jump infinite number of times;
	public int maxJumpCount;								//How much jumps we can do;
	public AudioClip jumpSFX;								//Jump sound effect if you need one;
	public float RollDuration;								//How long we will roll in seconds;
	public float RollSpeedDifference;						//roll speed increase factor;
	public float rollColliderCenter, rollColliderSize;		//collider changes while rolling;
	public AudioClip rollSFX;
	
	public enum OnDeath {Freeze, DropDown};					//What to do if we are dead
	public OnDeath onDeath;
	public AudioClip deathSFX;								//Death sound effect if you need one;
	public DeathEffect deathEffect;
	private Image deathEffectImg;							//Death effect image;                 

	[HideInInspector]
	public bool play, gameOver;

	private Vector3 velocity;
	private BoxCollider2D mainCollider;
	private float speed, rollDuration, moveSpeed;
	private Rigidbody2D thisRigidbody;
	private bool grounded, sfxOn;
	private int jumpCounter;
	private bool jump, roll;
	private float defaultGravity, defaultolliderCenter, defaultColliderSize;
	private float hitCount;
	private Color deathEffectColor;
	
	void Start () {

		sfxOn = Prefs.GetBool("sfxOn");
		GetComponent<AudioSource>().volume = PlayerPrefs.GetFloat("sfxVol");

		if(!tapToStart)
			play = true; 
		else 
			play = false;
		
		speed = minSpeed;
		gameObject.tag = "Player";
		thisRigidbody = GetComponent<Rigidbody2D>();
		thisRigidbody.gravityScale = gravity;
		defaultGravity = gravity;

		if(deathEffect.enable)
		{
			RectTransform canvas = GameObject.FindObjectOfType<Canvas>().GetComponent<RectTransform>();
			deathEffectImg = new GameObject("DeathEffect", typeof(Image)).GetComponent<Image>();
			deathEffectImg.transform.SetParent(canvas, false);
			deathEffectImg.rectTransform.sizeDelta = new Vector2(canvas.rect.width, canvas.rect.height);

			deathEffectColor = deathEffect.color;
			deathEffectColor.a = 0;
			deathEffectImg.color = deathEffectColor;
		}

		mainCollider = GetComponent<BoxCollider2D>();
		defaultolliderCenter = mainCollider.offset.y;
		defaultColliderSize = mainCollider.size.y;
	}

	void Update()
	{
		//Platform depending controls;
		#if UNITY_IPHONE || UNITY_ANDROID || UNITY_WP8 || UNITY_WP8_1
		foreach (Touch touch in Input.touches)
		{
			if(controls == Controls.JUMP_AND_SLIDE)
			{
				jump = touch.phase == TouchPhase.Began && touch.position.x < Screen.width/2;
				roll = touch.phase == TouchPhase.Began && touch.position.x > Screen.width/2 && rollDuration == 0;
			}
			else
				jump = touch.phase == TouchPhase.Began;
		}
		#endif
		
		#if UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX || UNITY_WEBPLAYER || UNITY_EDITOR
		if(controls == Controls.JUMP_AND_SLIDE)
		{
			jump = Input.GetMouseButtonDown(0) && jumpCounter < maxJumpCount;
			roll =  Input.GetMouseButtonDown(1) && rollDuration == 0;
		}
		else
			jump = Input.GetMouseButtonDown(0) && jumpCounter < maxJumpCount;
		#endif

		speed = Mathf.Clamp(speed, minSpeed, maxSpeed);			//clamp speed value with max speed;

		if (jump)
		{
			rollDuration = 0;
			mainCollider.size = new Vector2(mainCollider.size.x, defaultColliderSize);
			mainCollider.offset = new Vector2(mainCollider.offset.x, defaultolliderCenter);
		}

		//Jumping
		if(!play && (jump||roll))
			play = true;
		else if(jump && jumpCounter < maxJumpCount && !gameOver && play)
		{
			grounded = false;
			moveSpeed = speed;
			if(jumpSFX && sfxOn)
			{ 
				GetComponent<AudioSource>().clip = jumpSFX; 
				GetComponent<AudioSource>().Play(); 
			}
			thisRigidbody.velocity = new Vector2(thisRigidbody.velocity.x, 0.0F);
			if(limitJumps)jumpCounter++;
			thisRigidbody.AddForce(new Vector2(0.0F,jumpForce*100));
		}
		else if(play && roll && grounded)
		{
			if(rollSFX && sfxOn)
			{ 
				GetComponent<AudioSource>().clip = rollSFX; 
				GetComponent<AudioSource>().Play(); 
			}
			rollDuration = RollDuration;
		}

		//Moving
		if(!gameOver)
		{
			if(play)
			{
				speed += speedIncreaseFactor*Time.deltaTime;
				velocity = new Vector2(moveSpeed, thisRigidbody.velocity.y);
				thisRigidbody.gravityScale = defaultGravity;

				if(rollDuration > 0)
				{
					rollDuration -= 1*Time.deltaTime;
					mainCollider.size = new Vector2(mainCollider.size.x, rollColliderSize);
					mainCollider.offset = new Vector2(mainCollider.offset.x, rollColliderCenter);
					moveSpeed = speed+RollSpeedDifference;
				}
				else
				{
					rollDuration = 0;
					mainCollider.size = new Vector2(mainCollider.size.x, defaultColliderSize);
					mainCollider.offset = new Vector2(mainCollider.offset.x, defaultolliderCenter);
					moveSpeed = speed;
				}
			}
			else
			{
				velocity = Vector2.zero;
				thisRigidbody.gravityScale = 0.0F;
			}
		}
		else
		{
			if(onDeath == OnDeath.Freeze)
			{
				velocity = Vector2.zero;
				thisRigidbody.gravityScale = 0.0F;
			}
			else
			{
				velocity = new Vector2(0.0F, thisRigidbody.velocity.y);
			}
		}
		
		//Setting up animator;
		if(animator)
		{
			animator.SetBool ("GameOver", gameOver);
			animator.SetBool("Grounded", grounded);
			animator.SetFloat("Speed", Mathf.Abs(thisRigidbody.velocity.x));
			animator.SetBool("Jump", jump);
			animator.SetFloat("RollDuration", rollDuration);
		}

		deathEffectImg.gameObject.SetActive (deathEffectImg.color.a > 0.1F);
	}
	
	void FixedUpdate () 
	{
		thisRigidbody.velocity = velocity;

		if(deathEffect.enable)
		{
			deathEffectImg.color = deathEffectColor;
			if(deathEffectColor.a > 0)
				deathEffectColor.a -= deathEffect.deathEffectSpeed*Time.deltaTime;
		}
	}



	void OnCollisionEnter2D (Collision2D col)
	{
		jumpCounter = 0;	//reset jump counter;
		
		//Game over if collide with Obstacle;
		if(col.gameObject.CompareTag("Obstacle") && !gameOver)
		{
			//Draw death effect;
			deathEffectColor.a = 1;

			if(animator)animator.SetTrigger("Death");
			if(deathSFX && sfxOn){ GetComponent<AudioSource>().clip = deathSFX; GetComponent<AudioSource>().Play();}
			gameOver = true;
		}
		grounded = true;
	}

	
	//Reset speed after restart; we will call it from GameManager Restart function;
	public void Reset()
	{
		speed = minSpeed;
		if(!tapToStart)
			play = true; 
		else 
			play = false;
	}
}

[System.Serializable]
public class DeathEffect
{
	public bool enable;						//Enable or disable death effect
	public Color color;						//Death effect color;
	public float deathEffectSpeed = 3.0F; 	//How fast death effect texture should fade out;
}

This isn’t really a simple addition, this is a major addition to many areas. What you’ll need to do is:

Have a public function (or just a public variable in your player script which returns whether or not your player is invincible. Something like:

bool invincible = false;

//some code to detect if the player has shaken the device and swaps invincible to true

public bool isInvincible(){
    return invincible;
}

When the player collides with an obstacle, instead of dying, the obstacle needs to check that function. So in your obstacle script add something like:

void OnCollisionEnter(Collision col)
{
    if (col.gameObject.tag == player){
        if (col.gameObject.GetComponent< WHATEVER YOUR PLAYER SCRIPT IS CALLED >().isInvincible == true)
            DestroySelf();
        }else{
            col.gameObject.GetComponent< WHATEVER YOUR PLAYER SCRIPT IS CALLED >().Die();
        }
    }   
}

and write a function for DestroySelf that shows the boxes smashing out of the way or whatever.
Also a death function for the player if you don’t already have one.