Как исправить отрицательную величину в 2D Unity проекте - PullRequest
0 голосов
/ 28 июня 2019

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

image

Коллайдер прямо на краю стены, но я не понимаю, как именно он может влиять на приватную переменную

Метод перемещения, вызываемый в FixedUpdate

private void Move(Vector2 destination)
{
    // destination: "(0.0, -0.1)"

    float distance = destination.magnitude;
    // destination: "(0.0, -0.1)"   distance: -0.00999999978

    if (distance > MinMoveDistance)
    {
        int count = rigidbody2D.Cast(destination, hitBuffer, distance + ShellRadius);

        for (int i = 0; i < count; i++) 
        {
            Vector2 currentNormal = hitBuffer[i].normal;

            if (Mathf.Approximately(currentNormal.y, 1f)) 
            {
                IsGrounded = true;
            }

            float modifiedDistance = hitBuffer[i].distance - ShellRadius;

            distance = modifiedDistance < distance ? modifiedDistance : distance;
        }
    }

    rigidbody2D.position = rigidbody2D.position + destination.normalized * distance;
}

1 Ответ

0 голосов
/ 28 июня 2019

float distance = destination.magnitude; всегда должен возвращать положительное число, не знаю, как вы получаете значения, которые вы указали в комментариях.

Несмотря на это, если вы хотите, чтобы distance всегда был положительным, просто используйте float distance = Mathf.Abs(destination.magnitude);

...