@aizhar777

Персонаж в прыжке и движении двигается зигзагом или проваливается, как это исправить?

Гравитация установлена низкая (всего -5) и сила прыжка тоже не большая. что бы был эффект невесомости.
Столкнулся с такой проблемой, если нажать прыжок, и влево или вправо, то слегка заметно что перс движется как будто по ступеням спускается, это заметно слегка но глаз режет.
Так же если нажать в прыжке второй раз вправо или влево перс может провалится. То есть как будто отжали все кнопки, хотя они нажаты. Или если идти и нажать прыжок, он может сработать со второго раза.
Как будто нажатия не срабатывают одновременно или почти одновременно.

Код:
[SerializeField]
    private int lives = 5;

    [SerializeField]
    private float speed = 3f;

    [SerializeField]
    private float jumpForce = 5f;

    private Rigidbody2D rigidbody;
    private Animator animator;
    private SpriteRenderer sprite;
    
    float moveHorizontal;
    float moveVertical;

    private void Awake()
    {
        rigidbody = this.GetComponent<Rigidbody2D>();
        animator = this.GetComponent<Animator>();
        sprite = this.GetComponentInChildren<SpriteRenderer>();
    }

    void FixedUpdate()
    {
        moveHorizontal = Input.GetAxis("Horizontal");
        moveVertical = Input.GetAxis("Vertical");
    }

    void Update()
    {
        if (Input.GetButton("Horizontal")) Run();
        if (Input.GetButtonDown("Vertical")) Fly();

    }


    void Run()
    {
        Vector3 direction = this.transform.right * moveHorizontal;this.transform.position + direction, speed * Time.deltaTime);
        this.transform.Translate(direction * (speed * Time.deltaTime),Space.Self);
    }
    
    private void Fly()
    {
        if (moveVertical > 0) rigidbody.AddForce(this.transform.up * jumpForce, ForceMode2D.Impulse);
        else rigidbody.AddForce(-this.transform.up * (jumpForce + (jumpForce / 5)), ForceMode2D.Impulse);
    }


Настройки Rigidbody2D:
5b96a68a16d30300386301.png
  • Вопрос задан
  • 171 просмотр
Решения вопроса 1
MrMureno
@MrMureno Куратор тега Unity
VR for all
Из очевидного
1) Input - не считывается на FixedUpdate
ввод только на Update.
2) у вас движение в одном месте физикой (добавляете силу). и тут же рядом вы делаете движение через Translate (по сути телепортируете).
3) у вас добавление силы идет на Update. все же физику надо делать в цикле физики (в FixedUpdate)

в общем или управляете положением объекта или управляйте воздействующими на него силами.

отсюда вот и вытекают все эти странности) "мягкое" с "твердым" путаете))
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы