Why is my character jumping so fast?

So my sprite is jumping so fast it’s practically at the point to where it’s practically teleporting. I’ve fiddled with the code and the rigidbody so much, but it always has the same effect.
Here’s what my sprite looks like when jumping

Here’s what how I want it to jump

Here’s the entire code, with the jumping algorithm being in the Update() method

private Animator myAnimator;

private SpriteRenderer mySpriteRenderer;

[SerializeField]
private Rigidbody2D MyRigidBody;
// Use this for initialization

public float jumpPower;

public float jumpTime;

[SerializeField]
private float moveSpeed;

private float moveX = 0f;

private float moveY = 0f;

void Start ()
{
    myAnimator = GetComponent<Animator>();
}

public void Awake()
{
    mySpriteRenderer = GetComponent<SpriteRenderer>();
}

// Update is called once per frame
void FixedUpdate()
{
    moveX = Input.GetAxis("Horizontal");
    MyRigidBody.velocity = new Vector2(moveX * moveSpeed, 0);
    if (Input.GetKey(KeyCode.D))
    {
        myAnimator.SetBool("RunRight", true);
    }
    else
    {
        myAnimator.SetBool("RunRight", false);
    }

    if (Input.GetKey(KeyCode.A))
    {
        myAnimator.SetBool("RunLeft", true);
    }
    else
    {
        myAnimator.SetBool("RunLeft", false);
    }

   
}

void Update()
{
    if (Input.GetKeyDown(KeyCode.W))
    {
            MyRigidBody.AddForce(new Vector2(0, jumpPower));
    }
}

I’ve tried putting the jumping code in FixedUpdate() and it didn’t make a difference. I’ve fiddled with the gravity, and jump power, and I still have no idea what I’m doing wrong. Please help, thanks.

First thing to avoid is doing physics related changed in update. The physics engine is intended to be changed from FixedUpdate.
The reason for this is that FixedUpdate will be called once per physics step. (That’s the physics engine equivalent of a frame). Not a major problem just something to consider.

Now as for the fast jump.

The problem will be in HOW you are applying the jump force.
There are 2 ways that you can applying a force to a RidgedBody2D.

One is as a force. (This is what you are doing)

The second is as an Impulse. This is how you will normally want to make a RidgedBody “jump”.

The difference is in how the physics engine applies the force. An impulse is applied as an instant change in velocity where as a force is more like a push.

Because in a game we expect “jumping” to be instant (otherwise it doesn’t feel “right”) we need the force to be applied instantly. This is what ForceMode2d.Impulse is for.

What you are currently doing is pushing the RidgedBody up. Now in order to do this you will be applying a MASSIVE force to make it look instant. The down side of this is you have just pushed your ridged body so hard that it is going to take a long time for the gravity force to contract your force.

Now I am assuming that you have something checking for the top of your jump to prevent your Body from flying of into space. If you use an impulse you will probably find you no longer need this as you will get the nice jump arc you are looking for naturally.

You will also be able to use a smaller jump force. Just play around with your values till it feels right.

The change you want to make is this

MyRigidBody.AddForce(new Vector2(0, jumpPower), ForceMode2D.Impulse);