Задать вопрос
password22
@password22

(Unity 3D, character movement) Почему бег по диагонали медленнее, чем бег вправо/влево или прямо/назад?

Здравствуйте. Сделал движение персонажа в 3d, но получается так, что когда персонаж передвигается диагонально, а не в конкретное направление, то его скорость становится меньше. В интернете не нашел похожей проблемы, не пойму в чем дело.

Делаю под мобильные, поэтому использую Input System для джойстика.

private void Start()
    {
        controller = GetComponent<CharacterController>();
        cameraMain = Camera.main.transform;
        anim = GetComponent<Animator>();
        animAimRun = false;
    }

    void Update()
    {
              
        Vector2 movementInput = playerInput.PlayerMain.Move.ReadValue<Vector2>(); // движение джойстика
        Vector3 move = (cameraMain.forward * movementInput.y + cameraMain.right * movementInput.x);

        controller.Move(move * Time.deltaTime * playerSpeed); // x z

        anim.SetFloat("inputX", movementInput.x);
        anim.SetFloat("inputY", movementInput.y);

        if (movementInput != Vector2.zero) // rotation
        {
            float targetAngle = Mathf.Atan2(move.x, move.z) * Mathf.Rad2Deg;
            float angle = Mathf.SmoothDampAngle(transform.eulerAngles.y, targetAngle, ref turnSmoothVelocity, turnSmoothTime);
            transform.rotation = Quaternion.Euler(0f, angle, 0f);
        }

    }


Анимацию сделал так:
5fb6273a7febe591012304.png

Буду рад любой помощи или просто подсказке, в чем дело.
Спасибо
  • Вопрос задан
  • 774 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
ueruxon
@ueruxon
Только начал учится.
Попробуй move нормализовать.
Vector3 move = (cameraMain.forward * movementInput.y + cameraMain.right * movementInput.x);
move = move.normalized;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы