• Что делать эсли при повороте на наклонной поверхности персонаж подлетает?

    @5465
    Проблема может быть связана с тем, что вектор velocity персонажа не успевает измениться в момент поворота на наклонной поверхности, что приводит к тому, что персонаж подлетает на секунду.

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

    Вы можете использовать функцию Physics2D.Raycast для получения нормали к поверхности в точке, где находится персонаж. Затем вы можете использовать функцию Vector2.Reflect, чтобы изменить направление вектора velocity в соответствии с нормалью.

    Пример кода для изменения направления вектора velocity при повороте на наклонной поверхности:

    void Flip()
    {
        if ((onGround) && !JumpControl)
        {
            Vector2 normal = GetSurfaceNormal();
            rb.velocity = Vector2.Reflect(rb.velocity, normal);
        }
    
        Vector3 scale = transform.localScale;
        scale.x *= -1;
        transform.localScale = scale;
        Right = !Right;
    }
    
    Vector2 GetSurfaceNormal()
    {
        RaycastHit2D hit = Physics2D.Raycast(transform.position, -Vector2.up);
        return hit.normal;
    }


    В этом примере функция GetSurfaceNormal использует Raycast для получения нормали к поверхности в точке, где находится персонаж. Затем функция Flip использует Vector2.Reflect для изменения направления вектора velocity в соответствии с нормалью.
    Ответ написан
    3 комментария