Я создал FPS-контроллер с жестким корпусом по учебнику youtube, и все работает нормально, кроме диагонального движения, так как скорость x1,4 ошибочна. Итак, я попробовал vector3.normalized и vector3.ClampMagnitude, но, похоже, это не вариант для моего решения контроллера fps, поскольку скорость становится постоянной и неизменной. Исходный код:
x = Input.GetAxis("Horizontal") * speed * Time.deltaTime;
z = Input.GetAxis("Vertical") * speed * Time.deltaTime;
Vector3 moveVec = orientation.right * x + orientation.forward * z + Vector3.up * rb.velocity.y;
rb.velocity = moveVec;
Итак, я попробовал это
x = Input.GetAxis("Horizontal") ;
z = Input.GetAxis("Vertical");
Vector3 moveVec = Vector3.ClampMagnitude(orientation.right * x + orientation.forward * z +
Vector3.up * rb.velocity.y, 1.0f) * speed * Time.deltaTime;
rb.velocity = moveVec;
И это сработало, но когда я ударяю по объекту и получаю какое-то случайное преобразование Y, я летаю в воздухе, так как rb.velocity также умножается на скорость и deltaTime. Какие-нибудь советы?