'Horizontal movement of player causes egregious numbers when checking vertical velocity

Player movement is working (at least somewhat) now, however one issue remains, and that's the insane numbers the y velocity of the Rigidbody2D on the player. Since the isGrounded check I plan to add will use velocity for the sake of stability, this needs to be fixed. It confuses me, considering the velocity is 0 normally, but whenever moving left or right it changes to said high numbers.

Movement code:

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

public class PlayerM : MonoBehaviour
{
    private PControls control;
    Rigidbody2D rb;
    SpriteRenderer sp;
    Transform tr;
    public float speed = 0f;
    public float speedC;
    public float heightSpeed = 5f;
    public float heightC;
    public bool grounded;

    void Start()
    {
        control = new PControls();
        control.Enable();
        rb = GetComponent<Rigidbody2D>();
        sp = GetComponent<SpriteRenderer>();
        tr = GetComponent<Transform>();
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        RaycastHit2D hit = Physics2D.Raycast(rb.position, -Vector2.up);
        Color color = new Color(0, 0, 1.0f);
        Debug.DrawRay(transform.position, Vector2.down);
        speedC = rb.velocity.magnitude;
        var pos = control.Movement.Move.ReadValue<float>();
        float GetVerticalSpeed() => rb.velocity.y;
        


        

        if(pos == -1)
        {
            sp.flipX = true;
        }
        else if(pos == 1)
        {
            sp.flipX = false;
        }
        
        if((pos == 0) && (speed > 0.1f))
        {
            speed -= 3f * Time.deltaTime;
        }
        else if(speed < 1.4f)
        {
            speed += Mathf.Abs(pos) * 8 * Time.deltaTime;
        }

        if(speedC < 7f)
        {
            rb.AddForce(new Vector3((pos * 5), 0f) * speed * Time.deltaTime, ForceMode2D.Impulse);
        }
        
        
        
        var jump = control.Movement.Jump.ReadValue<float>();
        Debug.Log(GetVerticalSpeed());
        Vector3 v = rb.velocity;
        v.y = 10;

        if(jump == 1)
        {
            rb.velocity = v;
        }

    }    
}


Solution 1:[1]

Seems the main issue was fixed by converting the height velocity to an integer using System.Math.Round():

float vel = rb.velocity.y;
heightC = (int)System.Math.Round(vel);

Not sure it's the best solution, but it's something..

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Squiddu