Rigidbody flies up instead of just jumping.

I have this script attached to a capsule with a capsule collider and a rigidbody:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{

	public float Speed;
	public float JumpStrenght;

	Rigidbody rb;

	// Use this for initialization
	void Start ()
	{

		rb = GetComponent<Rigidbody> ();
		
	}
	
	// Update is called once per frame
	void Update ()
	{
		Jump (); 
	}

	void FixedUpdate ()
	{
		Move ();

	}

	float hMov;
	float vMov;


	void Move ()
	{	
		hMov = Input.GetAxisRaw ("Horizontal");
		vMov = Input.GetAxisRaw ("Vertical");

		Vector3 moveVector = new Vector3 (hMov, rb.velocity.y, vMov);
		moveVector.Normalize ();
		rb.velocity = transform.TransformDirection (moveVector * Speed);


	}

	void Jump ()
	{
		if (Input.GetKeyDown (KeyCode.Space)) {
			rb.velocity += Vector3.up * JumpStrenght;
		}
	}
}

When I press the space key the player starts flying upwards and never stops but I just want it to
jump.

How to fix it?

In these three lines:

Vector3 moveVector = new Vector3 (hMov, rb.velocity.y, vMov);
moveVector.Normalize ();
rb.velocity = transform.TransformDirection (moveVector * Speed);

you create a vector, normalize it, then set that as your new velocity.

Why is this a problem? Well, you’re factoring in vertical movement before normalizing the vector.

Fortunately, that also makes it an easy problem to solve, as well as an opportunity to improve efficiency and gamepad/analog support at the same time.

Vector3 moveVector = transform.TransformDirection(new Vector3(hMov, 0, vMov));
if(moveVector.sqrMagnitude > 1.0f)
{
	moveVector.Normalize();
}
rb.velocity = (moveVector * Speed) + new Vector3(0, rb.velocity.y, 0);

With the if statement, the Vector only needs to be normalized when holding a diagonal for input. Then, the current effects of gravity are only factored in after everything else has been handled, so it will be left unaffected.