How to keep player momentum after a jump landing (2D)

Hey guys,

I’m creating a Mario clone and I need to keep the player’s momentum into the jump and then onward into the landing. I can’t figure out how to achieve this. Every time I land, the player has to build up momentum again. Any Idea how to fix this? Here’s my code:

    Animator animator;
    Rigidbody2D rb;
    bool isGrounded;
    public float moveSpeed;
    public Vector2 acceleration;
    public float jumpHeight;
    public Transform groundCheckM;
    public Transform groundCheckL;
    public Transform groundCheckR;

    void Start()
    {
        animator = GetComponent<Animator>();
        rb = GetComponent<Rigidbody2D>();
        transform.eulerAngles = new Vector3(0, 0, 0);
    }

    private void Update()
    {

       if
             ((Physics2D.Linecast(transform.position,groundCheckM.position, 1 << LayerMask.NameToLayer("Floor/Platforms"))) || //Check if grounded
             (Physics2D.Linecast(transform.position, groundCheckL.position, 1 << LayerMask.NameToLayer("Floor/Platforms"))) ||
             (Physics2D.Linecast(transform.position, groundCheckR.position, 1 << LayerMask.NameToLayer("Floor/Platforms"))))
        {
            isGrounded = true;
            animator.SetBool("Jump", false);
        }
           
       else
        {
            isGrounded = false;
        } 

        animator.SetFloat("Walk", rb.velocity.x);  //Set animation float to x velocity 
       
        if (rb.velocity.x <= 0.03f && rb.velocity.x >= -0.03f && isGrounded) //Play "Idle" animation 
        {
            animator.Play("Mario_Idle");
        }

        if (rb.velocity.x >=4 || rb.velocity.x <=-4)

        {
            animator.speed = Mathf.Abs(rb.velocity.x / 5.5f); //Increase speed of walking animation with player's walking speed 
        }

    }
    void FixedUpdate()
    {

        if (Input.GetKey("d") || Input.GetKey("right")) //Move player to the right 
        {
            rb.AddForce(acceleration * rb.mass);
            transform.rotation = Quaternion.Euler (0, 0, 0);
        }

        else if (Input.GetKey("a") || Input.GetKey("left")) //Move player to the left
        {
            rb.AddForce(-acceleration * rb.mass);
            transform.rotation = Quaternion.Euler(0, 180, 0);
        }

            if (rb.velocity.x >= 10)
            {
                rb.velocity = new Vector2(10, rb.velocity.y);   //Cap player speed at 10 when moving right
            }

        else if (rb.velocity.x <= -10)
            {
                rb.velocity = new Vector2(-10, rb.velocity.y);  //Cap player speed at 10 when moving left 
        }


        if (Input.GetKey("space") && isGrounded) //Player jump 
        {
            rb.velocity += new Vector2(rb.velocity.x, jumpHeight);
            animator.SetBool("Jump", true);
        }

    }

}

You could maybe take the x velocity right before the jump and put it in a variable
then set the X velocity during the jump and after the jump to the initial velocity X .

  if (Input.GetKey("space") && isGrounded) //Player jump 
         {
             Vector2 InitalVelocity = rb.velocity; // you can make it a global variable so you can do this when landing too.
             rb.velocity += new Vector2(rb.velocity.x, jumpHeight);
             Vector2 vel = rb.velocity;
              vel.x = InitalVelocity.x;
              rb.velocity = vel;
             animator.SetBool("Jump", true);
         }