Персонаж не может двигаться из-за высокого трения - PullRequest
0 голосов
/ 28 января 2019

У меня проблемы с PhysicMaterial2D из-за земли и моего персонажа.Когда персонаж не двигается, он работает так, как мне нужно (оба материала имеют friction = 1.0).Но из-за высокого значения трения персонаж не может двигаться.
Конечно, я мог бы использовать больше силы (AddForce()) для перемещения персонажа, но тогда он будет двигаться слишком быстро на других основаниях, использующих другие материалы.

Как эта проблема решается в других играх (т.е. во многих платформерах)?Должен ли я установить трение материала персонажа в ноль, когда он движется (у меня нет других идей)?Или есть более симпатичное решение?

preview

PS Я также испытал с более высоким значением трения, но это привелочтобы персонаж начал вращаться при движении.

ДОБАВЛЕНО
Я попытался установить boxCollider.sharedMaterial.friction = 0.0f для движения и вернуться к 1.0f после того, как пользователь отпустил кнопку НО персонаж продолжает двигаться как с нулевым трением, хотя в логгере я вижу, что это 1.0f.

private void Update()
{
    if (!paused)
    {
        if (Input.GetMouseButtonDown(0) && !IsOverPauseButton())
        {
            isPressed = true;

            endMovePoint = Input.mousePosition;
            isWalk = GetTouchDistance() > jumpTriggerRadius;

            if (!(isWalk || isJump))
            {
                StartCoroutine(Jump());
            }
        }
        else if (Input.GetMouseButtonUp(0) && isPressed)
        {
            boxCollider.sharedMaterial.friction = 1.0f;
            isPressed = false;
            isWalk = false;
            canFlip = true;
        }

        if (isWalk)
        {
            if (!isJump)
            {
                boxCollider.sharedMaterial.friction = 0.0f;
            }

            Walk();
        }

        animator.SetBool(WalkingFlag, isWalk && !isJump);
    }

    if (isWalk && !isJump)
    {
        FixSpeed();
    }

    Debug.Log("Friction=" + boxCollider.sharedMaterial.friction);
}

1 Ответ

0 голосов
/ 05 февраля 2019

Вместо того, чтобы использовать трение, вы можете ослабить движение игрока.

Скажем, у вашего игрока скорость 10, вы хотите, чтобы игрок прекратил движение самостоятельно, потому что это естественно.

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

player.velocity.x *= 0.9f;

Это установит скорость х игрока на 90% от его первоначальной скорости.Делайте это каждый кадр, и вскоре ваш игрок сам остановится.

Если описанный выше метод не дает желаемого эффекта, вы всегда можете просто вычесть произвольное значение из скорости игрока (конечно, вы должны учитыватьесли скорость игрока отрицательная):

player.vel.x -= 1;

Оба вышеуказанных метода могут учитывать трение, если это необходимо, просто умножьте процентное или произвольное значение на коэффициент трения плюс илиминус немного, чтобы удовлетворить ваши потребности.

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