Unity 2D: уменьшите расстояние прыжка без ущерба для высоты прыжка - PullRequest
0 голосов
/ 08 октября 2018

Можно ли это сделать?

Вот код для моих прыжков:

void FixedUpdate(){
    if(!takingDamage){

        float move = Input.GetAxis("Horizontal");
        body.velocity = new Vector2(move * speed, body.velocity.y);

        if (jumping){
            body.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);         
            onGround = false;
        }       
    }

}

Я уже пробовал возиться с гравитацией, снижая скорость, увеличивая массу ... Все, что яdo, чтобы уменьшить расстояние, также уменьшает высоту, но высота именно там, где я хочу, чтобы она была ...

Решением было проверить, находился ли персонаж на земле, при установке горизонтальной скорости и уменьшениидобавленная скорость, вот как логика с этим изменением:

void FixedUpdate(){
    if(!takingDamage){

        float move = Input.GetAxis("Horizontal");
        if(onGround){
            body.velocity = new Vector2(move * speed, body.velocity.y);
        } else {
            body.velocity = new Vector2(move * (speed * 0.7f), body.velocity.y);
        }

        if (jumping){
            body.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);         
            onGround = false;
        }       
    }

}

1 Ответ

0 голосов
/ 08 октября 2018

Вы могли бы попытаться добавить противоположную силу от их движения, что-то вроде «прыжкового прыжка», где они замедляются, если они пытаются двигаться горизонтально.

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

Другой способ - масштабировать вектор скорости только в горизонтальном направлении.Что-то вроде:

newVelocity = new Vector3(oldVelocity.x, oldVelocity.y, oldVelocity.z * scaleFactor)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...