Проблемы с прыжком в Unity

Проблема такова: персонаж слишком резко прыгает,можно сказать телепортируется. Непонятно каким образом это исправить.Дело в том,что этот псевдопрыжок работает только при единственном способе записи кода (указан на картинке).

При остальных - тупо не прыгает. Менял силу гравитации,массу,множитель прыжка - всё без толку.

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

public class Controller : MonoBehaviour
{
    
    public Rigidbody2D rb;
    public SpriteRenderer spriteFlip;

    public float groundRadius = 0.07f;
    public LayerMask whatIsGround;
    public bool IsGrounded = false;
    public Transform groundCheck;

    public float velocity = 5f;
    public float jumpforce = 4500;
   
   
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        
    }


    private void FixedUpdate()
    {        
        MovingX();   
    }

    private void Update()
    {
        CheckingGround();
        Jump();
    }

    void MovingX()
    {
        Vector2 moveInput = new Vector2(Input.GetAxisRaw("Horizontal"), 0) * velocity;
        

        if (moveInput.x > 0)
        {
            spriteFlip.flipX = false;
        }else if(moveInput.x < 0)
        {
            spriteFlip.flipX = true;
        }

        if (Input.GetKey(KeyCode.LeftShift))
        {
            velocity = 15f;
        }
        else
        {
            velocity = 5f;
        }

        rb.MovePosition(rb.position + moveInput * Time.fixedDeltaTime);
        
    }

    void Jump()
    {
        if (Input.GetKeyDown(KeyCode.UpArrow) && IsGrounded)
        {
            rb.AddForce(Vector2.up * jumpforce);

            //rb.AddForce(Vector2.up * 1000,ForceMode2D.Impulse); -------------------------------- не работает

            //rb.AddForce(transform.up * jumpforce, ForceMode2D.Impulse); ------------------------- не работает

            //rb.AddForce(Vector3.up * 1000 * Time.deltaTime); ------------------------------- не работает

            //var jumpVectorAndPowerOfJump = new Vector2(0, 9990); -------------------------------- не работает
            //rb.AddForce(jumpVectorAndPowerOfJump, ForceMode2D.Impulse);

        }
    }

    void CheckingGround()
    {
        IsGrounded = Physics2D.OverlapCircle(groundCheck.position, groundRadius, whatIsGround);
        if (!IsGrounded)
            return;
    }

}

введите сюда описание изображения


Ответы (1 шт):

Автор решения: AC Studio

sample

Попробуйте этот код:

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

public class Jump2D : MonoBehaviour
{

    public Rigidbody2D rig;
    public float Jump=10;
    public ForceMode2D forceMode = ForceMode2D.Impulse;
    public bool check;



    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space) && check)
        {
            rig.AddForce(Vector3.up * Jump,forceMode);
        }
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        check = true;
    }

    private void OnCollisionExit2D(Collision2D collision)
    {
        check = false;
    }

}
→ Ссылка