How do i make jumps follow through with rigidbody2D.addforce?

i’m currently using the 2D character controller that comes in the Sample Assets package as a starting point for my 2D game. the thing is when you jump you can move around in the air, but when you stop inputting a direction the player stops in his tracks. i would like the jump to follow through with rigidbody2D physics. but i cant seem to get it working. my horizontal movement is done with rigidbody2D.velocity. my player is a rigidbody2D

heres the code:

input sctipt

using UnityEngine;

[RequireComponent(typeof(PlatformerCharacter2D))]
public class Platformer2DUserControl : MonoBehaviour 
{
	private PlatformerCharacter2D character;
    private bool jump;


	void Awake()
	{
		character = GetComponent<PlatformerCharacter2D>();
	}

    void Update ()
    {
        // Read the jump input in Update so button presses aren't missed.

		if (Input.GetButtonDown("Jump")) jump = true;

    }

	void FixedUpdate()
	{
	
		// Read the inputs.
	    
		float h = Input.GetAxis("Horizontal");


		// Pass all parameters to the character control script.
		character.Move( h , jump );

        // Reset the jump input once it has been used.
	    jump = false;
	}
}

Character controller

sing UnityEngine;

public class PlatformerCharacter2D : MonoBehaviour 
{
	bool facingRight = true;							// For determining which way the player is currently facing.

	[SerializeField] float maxSpeed = 10f;				// The fastest the player can travel in the x axis.
	[SerializeField] float jumpForce = 400f;			// Amount of force added when the player jumps.	

	[Range(0, 1)]
				// Amount of maxSpeed applied to crouching movement. 1 = 100%
	
	[SerializeField] bool airControl = false;			// Whether or not a player can steer while jumping;
	[SerializeField] LayerMask whatIsGround;			// A mask determining what is ground to the character
	
	Transform groundCheck;								// A position marking where to check if the player is grounded.
	float groundedRadius = .2f;							// Radius of the overlap circle to determine if grounded
	public bool grounded = false;								// Whether or not the player is grounded.
	Transform ceilingCheck;								// A position marking where to check for ceilings
	float ceilingRadius = .01f;							// Radius of the overlap circle to determine if the player can stand up
	Animator anim;										// Reference to the player's animator component.


    void Awake()
	{
		// Setting up references.
		groundCheck = transform.Find("GroundCheck");
		ceilingCheck = transform.Find("CeilingCheck");
		anim = GetComponent<Animator>();
	}


	void FixedUpdate()
	{
		// The player is grounded if a circlecast to the groundcheck position hits anything designated as ground
		grounded = Physics2D.OverlapCircle(groundCheck.position, groundedRadius, whatIsGround);
		anim.SetBool("Ground", grounded);

		// Set the vertical animation
		anim.SetFloat("vSpeed", rigidbody2D.velocity.y);
	}


	public void Move(float move, bool jump)
	{
	 

				//only control the player if grounded or airControl is turned on
				if (grounded || airControl) {
		

						// The Speed animator parameter is set to the absolute value of the horizontal input.
						anim.SetFloat ("Speed", Mathf.Abs (move));

						// Move the character
						rigidbody2D.velocity = new Vector2 (move * maxSpeed, rigidbody2D.velocity.y);
			    
			
						// If the input is moving the player right and the player is facing left...
						if (move > 0 && !facingRight)
				// ... flip the player.
								Flip ();
			// Otherwise if the input is moving the player left and the player is facing right...
			else if (move < 0 && facingRight)
				// ... flip the player.
								Flip ();
				}

				// If the player should jump...
		if (grounded && jump) {
						// Add a vertical force to the player.
						anim.SetBool ("Ground", false);
						rigidbody2D.AddForce (new Vector2 (0f, jumpForce));
				}
		if(Input.GetAxis("Vertical") != 0)  {
			Physics2D.IgnoreLayerCollision (9, 11, true); 

		} 
		else 
		{ 

			Physics2D.IgnoreLayerCollision (9, 11, rigidbody2D.velocity.y > 0);
		}

			
	}
	
	
	
	void Flip ()
	{
		// Switch the way the player is labelled as facing.
		facingRight = !facingRight;
		
		// Multiply the player's x local scale by -1.
		Vector3 theScale = transform.localScale;
		theScale.x *= -1;
		transform.localScale = theScale;
	}
}

sorry i couldn’t be more to the point i hope you guys understand and can help me out. the jumping just feels weird haha.

Thanks so much!

To force the player to follow through with a jump, simply disable his input once he has started to jump.

So, for example, in the Fixed Update and Update threads, have a check of something like

if(player.isGrounded)
{//If the player isGrounded, they can jump and move around
  //Movement Input Code goes here

}
else if(!player.IsGrounded)
{
 //Do Nothing
}

I don’t normally use CharacterControllers in my games, but I believe the isGrounded is set automatically, so as long as the player is touching the ground it will be true. But when they are mid-jump, it will be false.