Я пытаюсь создать контроллер персонажа, который будет влиять на скорость движения в зависимости от того, насколько далеко игрок нажимает на левую палку.Когда я могу заставить так много работать, другой проблемой, с которой я сталкиваюсь, является снижение скорости игроков при движении по диагонали.
Большая часть информации, которую я нашел в Интернете, имеет дело с противоположной проблемой:движение по диагонали быстрее (вектор движения идет выше 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);
}