Основано на Rigidbody и CapsuleCollider - PullRequest
0 голосов
/ 19 октября 2019

пробовал другую длину луча, все равно не работает !! как правильно его настроить? Вот часть кода, относящаяся к прыжку

    bool isRolling = false;
    bool wannaJump = false;

    void FixedUpdate()
    {
       rb.AddForce(new Vector3(0, Physics.gravity.y * 4, 0), ForceMode.Acceleration);

        if (wannaJump && isGrounded())
        {
            rb.AddForce(new Vector3(0, JumpSpeed, 0), ForceMode.Impulse);
            wannaJump = false;
        }
    }

    void Update()
    {
        if (isGrounded())
        {
           if (Input.GetAxisRaw("Vertical") > 0)
           wannaJump = true;
        }        
    }

    bool isGrounded()
    {
        return Physics.Raycast(transform.position, Vector3.down, 0.05f);
    }

1 Ответ

0 голосов
/ 20 октября 2019

Ваша проблема заключается в вашем методе IsGounded.

вместо того, чтобы навести луч из нижней части объекта, который он получает из центра.

Я бы порекомендовал создать Vector3, который определяетнижнюю часть объекта и приведение луча оттуда вместо transform.position.

должно работать, если вы используете следующую переменную:

Vector3 playerBottom = new Vector3 (transform.x, transform. y - (transform.localScale.y / 2), transform.z);

метод IsGounded должен инициализировать Raycast по переменной playerBottom вместо transform.position

, вы также должны убедиться, чточто Луч не взаимодействует с самой моделью игрока. просто дайте Игроку Layer Mask и сделайте raycast игнорирующим, сказал Layer Mask.

Для получения дополнительной информации об этом: https://docs.unity3d.com/ScriptReference/Physics.Raycast.html

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...