Endless Runner : left/right movement is slow when player goes below/above ground level i.e(y axis != 0),

left/right movement of player becomes slow when position of player in y axis increases or decreases i.e when player goes above or below ground level (everything works fine when player is at y=0)

private const float LANE_DISTANCE = 3.0f;
private bool isRunning = false;
//Movement
private CharacterController controller;
private float jumpForce = 4.0f;
private float gravity = 10.0f;
private float verticalVelocity;
public float speed = 10.0f;
private int desiredLane = 1; //0(left),1(middle),2(right)

private void Start()
{
	controller = GetComponent<CharacterController> ();

}

private void Update()
{
	if(!isRunning)
		return;

	if(MobileInput.Instance.SwipeLeft)
		MoveLane(false);
	if(MobileInput.Instance.SwipeRight)
		MoveLane(true);

	// calculate where we should be in the future
	Vector3 targetPosition = transform.position.z * Vector3.forward;
	if (desiredLane == 0)
		targetPosition += Vector3.left * LANE_DISTANCE;
	else if (desiredLane == 2)
		targetPosition += Vector3.right * LANE_DISTANCE;

	//lets calculate our move delta
	Vector3 moveVector = Vector3.zero;
	moveVector.x = (targetPosition - transform.position).normalized.x * speed;

	// calculate y
	if(IsGrounded()) // if grounded
	{
		verticalVelocity = -0.1f;

		if(MobileInput.Instance.SwipeUp)
		{
			//jump
			verticalVelocity = jumpForce;
		}
		else if (MobileInput.Instance.SwipeDown) {
			//slide
			StartSliding();
			Invoke ("StopSliding", 1.0f);
		}
	}
	else
	{
		verticalVelocity -= (gravity * Time.deltaTime);

		//fast falling mechanism
		if(MobileInput.Instance.SwipeDown)
		{
			verticalVelocity= -jumpForce;
		}
	}
	moveVector.y = verticalVelocity;
	moveVector.z = speed;

	//move the player
	controller.Move(moveVector * Time.deltaTime);
}

private void MoveLane (bool goingRight)
{
	desiredLane += (goingRight) ? 1 : -1;
	desiredLane = Mathf.Clamp (desiredLane, 0, 2);
}

private bool IsGrounded()
{
	Ray groundRay = new Ray(new Vector3(controller.bounds.center.x,(controller.bounds.center.y - controller.bounds.extents.y) + 0.2f,controller.bounds.center.z),Vector3.down);
	Debug.DrawRay (groundRay.origin, groundRay.direction, Color.cyan, 1.0f);

	return Physics.Raycast(groundRay,0.2f + 0.1f);
}

public void StartRunning()
{
	isRunning = true;
}

private void Crash()
{
	isRunning = false;
}

}

The only thing I could find here was on line 36 you’re subtracting Vector3s instead of the y axis. (edit: *x axis) Try

(targetPosition.x - transform.position.x)