Высота прыжка игрока не соответствует - Unity - PullRequest
0 голосов
/ 05 июня 2019

Я работаю над игрой на 2D-платформе и понял, что, например, функция прыжка игрока не всегда работает одинаково. Высота прыжка различна, если игрок прыгает во время движения / бега или если игрок прыгает без движения.

У меня есть две отдельные функции Move () и Jump (), Move () использует transform.Translate для перемещения игрока, а Jump () использует hardBody.AddForce () для прыжка игрока. Я уже пытался изменить функцию Move () плеера, чтобы использовать жесткие тела, чтобы заставить игрока двигаться вместо использования transform.Translate (). И это не сработало.

Я также пытался заставить игрока прыгать, используя transform.Translate, который решил проблему непостоянной высоты прыжка, но игрок просто телепортировался вместо прыжка

это представление моей структуры кода, а не фактический код, потому что фактический код похож на 600 строк

public class Player
{
    float JumpSpeed;
    bool isGrounded;

    void Update()
    {
        if (Input.GetKey(KeyCode.A))
            Move(Directions.Left);

        if (Input.GetKey(KeyCode.D))
            Move(Directions.Right);

        if (Input.GetKeyDown(KeyCode.Space))
            Jump(JumpSpeed);
    }

    public void Move(Directions dir)
    {
        Vector2 speed;
        //figure out speed and etc...

        //makes the player move in the right direction and speed
        transform.Translate(speed * Time.deltaTime);
    }

    public void Jump(float speed)
    {
        if(isGrounded)
            rigidBody.AddForce(new Vector2(0, speed * Time.deltaTime), ForceMode2D.Impulse);
    }
}

1 Ответ

1 голос
/ 05 июня 2019

Не уверен, что это именно ваша проблема, но использование translate для перемещения игрока и затем добавление силы к прыжку на самом деле не лучший способ решения проблемы.

Я бы хотел использовать скоростную часть твердого тела как для прыжка, так и для движения. Это предотвратит любые странности, которые может вызвать перевод объекта.

...