Гравитация не влияет на игрока при прыжке - PullRequest
0 голосов
/ 31 января 2019

У меня есть игрок Endless Runner, который в любом состоянии может прыгать.При нажатии пробела мой игрок продолжает бесконечно подниматься в небо.

Он имеет анимацию и контроллер персонажа, но не Rigidbody.Вместо этого я использовал его в скрипте.

В аниматоре я добавил bool ground и триггер для прыжков.

Я установил условие grounded в true при переходе из любого состояния в прыжок.

: Снимок экрана

Вот код ниже

private CharacterController controller;
private float jumpForce = 4.0f;
private float gravity = 12.0f;
private float verticalVelocity;

void Update()
{
    Vector3 moveVector = Vector3.zero;
    moveVector.x = (targetPosition - transform.position).normalized.x * speed;

    bool isGrounded = IsGrounded();
    animator.SetBool("jumping", isGrounded);

    //Calculate Y
    if (isGrounded) //if grounded
    {
        verticalVelocity = -0.1f;

        if(Input.GetKeyDown(KeyCode.Space))
        {
            //jump
            animator.SetTrigger("jumping");
            verticalVelocity = jumpForce; 
        }
        else
        {
            verticalVelocity -= (gravity * Time.deltaTime);

            //fast faling mechanic
            if(Input.GetKeyDown(KeyCode.Space))
            {
                verticalVelocity = -jumpForce;
            }
        }
    }
}

private bool IsGrounded()
{
    Ray groundRay = new Ray(new Vector3(
        controller.bounds.center.x,
        (controller.bounds.center.y - controller.bounds.extents.y) + 0.2f,
        controller.bounds.center.z),
        Vector3.down);
    return (Physics.Raycast(groundRay, 0.2f + 0.1f));

}

Любые идеи очень ценятся!

1 Ответ

0 голосов
/ 31 января 2019

Если вы хотите, чтобы система Unity управляла вашей физикой , вам придется использовать там компонент Rigidbody.

В противном случае вам необходимо смоделировать ускорение.Делайте это, увеличивая скорость каждого тика физики в FixedUpdate

float gravityVelocity = 0f;

float gravityFactor = 0.5f;
float gravityAcceleration = 9.2f * gravityFactor;

void FixedUpdate()
{
    gravityVelocity += gravityAcceleration * Time.fixedDeltaTime;

    gameObjectToUpdate.transform.position +=
        new Vector3(0, gameObjectToUpdate.transform.position.y - gravityVelocity, 0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...