Unity3D - Движение игрока от третьего лица в диагональном направлении медленнее, чем вертикальное и горизонтальное движение? - PullRequest
0 голосов
/ 09 мая 2019

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

Большая часть информации, которую я нашел в Интернете, имеет дело с противоположной проблемой:движение по диагонали быстрее (вектор движения идет выше 1).Решение было бы заключаться в том, чтобы зафиксировать величину, чтобы прижим ручки в угол не превышал 1. Я пробовал зажим, чтобы посмотреть, сработает ли это, однако я не верю, что это решение моей проблемы.

Код здесь позволяет игроку перемещаться относительно камеры, а скорость зависит от входного вектора.

Vector3 input = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
Vector3 inputDir = input.normalized;
void Move(Vector3 inputDir, Vector3 input)
    {
        running = Input.GetKey(KeyCode.Joystick1Button1); // B button on xbox one controller

        // Rotation stuff
        if (inputDir != Vector3.zero) {
            float targetRotation = Mathf.Atan2(inputDir.x, inputDir.z) * Mathf.Rad2Deg + cameraTransform.eulerAngles.y;
            transform.eulerAngles = Vector3.up * Mathf.SmoothDampAngle(transform.eulerAngles.y, targetRotation, ref turnSmoothVelocity, GetModifiedSmoothTime(speedSmoothTime));
        }

        // Pretty sure this is where things are breaking        
        float targetSpeed = ((running) ? runSpeed : walkSpeed) * inputDir.magnitude;
        currentSpeed = Mathf.SmoothDamp(currentSpeed, targetSpeed, ref speedSmoothVelocity, GetModifiedSmoothTime(speedSmoothTime));
        currentSpeed *= input.magnitude;
        vel = transform.forward * currentSpeed + Vector3.up * velocityY;
        currentSpeed = new Vector3(_controller.velocity.x, 0, _controller.velocity.z).magnitude;
    }
void ExecuteMovement()
    {            
        _controller.Move(vel * Time.deltaTime);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...